有人说go比较高级,无非是说go语言比java多了用户态的纤程。目前java原生jdk到了JDK14,还没有支持,不过我相信以后肯定会支持的。目前只能通过三方jar包(Quasar)的形式来支持。

那就提前感受下纤程的威力吧。话不多说,直接上测试结果,大家自行感受其威力!!!

1.多线程。

/*** @Auther Micky* @Date 2020-10-25 11:35* <p>* 4个cpu,8G内存, i7处理器,Windows10系统* 线程和纤程的区别* 先做单线程无纤程的。* cost time is 2056 ms* cost time is 3871 ms* cost time is 2878 ms* cost time is 3414 ms* cost time is 3462 ms*/
public class ThreadOnlyTest {public static void main(String[] args) throws Exception {long startTime = System.currentTimeMillis();int size = 10000;CountDownLatch countDownLatch = new CountDownLatch(size);Thread[] ThreadArray = new Thread[size];for (int i = 0; i < ThreadArray.length; i++) {ThreadArray[i] = new Thread(() -> {calc();countDownLatch.countDown();});}for (int i = 0; i < ThreadArray.length; i++) {ThreadArray[i].start();}countDownLatch.await();System.out.println("cost time is " + (System.currentTimeMillis() - startTime) + " ms");}private static void calc() {int result = 0;for (int i = 0; i < 10000; i++) {for (int i1 = 0; i1 < 1000; i1++) {result += i1;}}}
}

2.一个线程,多纤程

package study.concurrent.fiber;import co.paralleluniverse.fibers.Fiber;/*** @Auther Micky* @Date 2020-10-25 11:35* 4个cpu,8G内存, i7处理器,Windows10系统* 线程和纤程的区别* 先做单线程多纤程的。* cost time is 419 ms* cost time is 472 ms* cost time is 416 ms* cost time is 625 ms* cost time is 426 ms*/
public class OneThreadFibersTest {public static void main(String[] args) throws Exception {long startTime = System.currentTimeMillis();int size = 10000;Fiber<Void>[] fiberArray = new Fiber[size];for (int i = 0; i < fiberArray.length; i++) {fiberArray[i] = new Fiber<>(() -> calc());}for (int i = 0; i < fiberArray.length; i++) {fiberArray[i].start();}for (int i = 0; i < fiberArray.length; i++) {fiberArray[i].join();}System.out.println("cost time is " + (System.currentTimeMillis() - startTime) + " ms");}private static void calc() {int result = 0;for (int i = 0; i < 10000; i++) {for (int i1 = 0; i1 < 1000; i1++) {result += i1;}}}
}

3.多线程+多纤程

package study.concurrent.fiber;import co.paralleluniverse.fibers.Fiber;import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.CountDownLatch;/*** @Auther Micky* @Date 2020-10-25 11:35* 4个cpu,8G内存, i7处理器,Windows10系统* 线程和纤程的区别* 先做多线程多纤程的。* <p>*cost time is 347 ms*cost time is 402 ms*cost time is 394 ms*cost time is 364 ms*cost time is 348 ms**/
public class TenThreadFibersTest002 {public static void main(String[] args) throws Exception {long startTime = System.currentTimeMillis();int threadSize = 10;CountDownLatch countDownLatch = new CountDownLatch(threadSize);Thread[] ThreadArray = new Thread[threadSize];List<Fiber> fiberList = new ArrayList<>();for (int i = 0; i < ThreadArray.length; i++) {ThreadArray[i] = new Thread(() -> {try {fiberList.addAll(doStartFiber());countDownLatch.countDown();} catch (Exception e) {e.printStackTrace();}});}for (int i = 0; i < ThreadArray.length; i++) {ThreadArray[i].start();}countDownLatch.await();//保证所有的都启动完for (int i = 0; i < fiberList.size(); i++) {fiberList.get(i).join();//保证所有的纤程都执行完}System.out.println("cost time is " + (System.currentTimeMillis() - startTime) + " ms");}private static List<Fiber> doStartFiber() throws Exception {Fiber<Void>[] fiberArray = new Fiber[1000];for (int i = 0; i < fiberArray.length; i++) {fiberArray[i] = new Fiber<>(() -> calc());}for (int i = 0; i < fiberArray.length; i++) {fiberArray[i].start();}return Arrays.asList(fiberArray);}private static void calc() {int result = 0;for (int i = 0; i < 10000; i++) {for (int i1 = 0; i1 < 1000; i1++) {result += i1;}}}
}

4.多线程+多纤程002 :这种好像不对。没有执行完,就打印时间了。join还是不靠谱的。

package study.concurrent.fiber;import co.paralleluniverse.fibers.Fiber;import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;/*** @Auther Micky* @Date 2020-10-25 11:35* 4个cpu,8G内存, i7处理器,Windows10系统* 线程和纤程的区别* 先做多线程多纤程的。* <p>*cost time is 66 ms*cost time is 103 ms*cost time is 83 ms* cost time is 80 ms* cost time is 69 ms* cost time is 62 ms**/
public class TenThreadFibersTest002 {public static void main(String[] args) throws Exception {long startTime = System.currentTimeMillis();int threadSize = 10;Thread[] ThreadArray = new Thread[threadSize];List<Fiber> fiberList = new ArrayList<>();for (int i = 0; i < ThreadArray.length; i++) {ThreadArray[i] = new Thread(() -> {try {fiberList.addAll(doStartFiber());} catch (Exception e) {e.printStackTrace();}});}for (int i = 0; i < ThreadArray.length; i++) {ThreadArray[i].start();}for (int i = 0; i < fiberList.size(); i++) {fiberList.get(i).join();}System.out.println("cost time is " + (System.currentTimeMillis() - startTime) + " ms");}private static List<Fiber> doStartFiber() throws Exception {Fiber<Void>[] fiberArray = new Fiber[1000];for (int i = 0; i < fiberArray.length; i++) {fiberArray[i] = new Fiber<>(() -> calc());}for (int i = 0; i < fiberArray.length; i++) {fiberArray[i].start();}return Arrays.asList(fiberArray);}private static void calc() {int result = 0;for (int i = 0; i < 10000; i++) {for (int i1 = 0; i1 < 1000; i1++) {result += i1;}}}
}

上一级->新技术篇

首页->目录大纲

go语言比java高级在哪里相关推荐

  1. 为什么3年的Java高级程序员薪水仅仅8k-10k,而一个Linux底层C语言程序员两年经验就敢要1...

    为什么80%的码农都做不了架构师?>>>    为什么3年的Java高级程序员薪水仅仅8k-10k,而一个Linux底层C语言程序员两年经验就敢要10k的薪水?   由于目前国内嵌入 ...

  2. Java高级特性:clone()方法

    标签:ringbuf   his   硬件   throws   port   protect   序列化   ext   this 目录 源码 深拷贝和浅拷贝 对象串行化实现拷贝 常见面试题 源码 ...

  3. Java高级技术笔记

    Java高级技术笔记 URL地址 HTTP协议 开发工具 Java开发工具包(JDK) JSP引擎 MyEclipse IDEA 工具集成 C/S架构是Client/Server的简写,也就是客户机/ ...

  4. 如何才能成为java高级程序员?

    身为程序员,一旦进入技术行列,就开启了持续学习的道路,更迭迅速的互联网时代,技术自然也是一代一代的更新,在技术进阶的道路上,要不断吸收新的想法和技术知识. 牛逼的人总是让人羡慕,但如何才能让自己成为牛 ...

  5. java高级教程_高级Java教程

    java高级教程 课程大纲 学习Java基础很容易. 但是,真正钻研该语言并研究其更高级的概念和细微差别将使您成为一名出色的Java开发人员. 网络上充斥着"软","便宜 ...

  6. Java 高级特性 --- 反射

    From:Java 高级特性 --- 反射:https://www.jianshu.com/p/9be58ee20dee From:Java 基础之 --- 反射(非常重要):https://blog ...

  7. Java高级开发工程师面试考纲

    转自: http://buluo.qq.com/p/detail.html?bid=11148&pid=1064765-1470643028 如果要应聘高级开发工程师职务,仅仅懂得Java的基 ...

  8. Java原子类中CAS的底层实现,java高级面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...

  9. java高级框架应用开发案例教程_Java高级框架应用开发案例教程:struts2+spring+hibernate PDF...

    资源名称:Java高级框架应用开发案例教程:struts2+spring+hibernate PDF 第1章 struts+spring+hibernate概述 1.1 框架概述 1.2 struts ...

最新文章

  1. linux 安装php 5.5_Linux下yum升级安装PHP 5.5
  2. 网络知识:核心交换机概念知识介绍
  3. LINQ:进阶 - LINQ 标准查询操作概述
  4. java comparator_Java基础之String漫谈(二)
  5. 主席树【bzoj3524(p3567)】[POI2014]Couriers
  6. 出租车计费java_java 计程车计费
  7. flask response Content-Type
  8. 微计算机控制技术 题库,微型计算机控制技术选择题
  9. kerberos安全认证
  10. sudo: unable to resolve host 枝桠
  11. vue+echarts 地图实现三级下钻
  12. IE浏览器无法查看源文件的8大原因
  13. 嵌入式开发—C语言面试题
  14. 山寨版Google识图
  15. IC 拔取器 rework station
  16. 朋友圈图片评论功能,来了!
  17. Windows下使用gFortran,VScode+MinGW
  18. 怎样在百度UMeditor编辑器中插入腾讯和爱奇艺网站视频?
  19. android绘制虚线
  20. MoviePy - 中文文档4-MoviePy实战案例-追踪人脸,打马赛克

热门文章

  1. 用于图片文本识别的Tesseract-OCR的安装说明(windows10)
  2. 解决欠拟合和过拟合的几种方法
  3. Linux系统连接校园网指南(JLU)
  4. 高级程序设计语言的共性内容
  5. 深入了解 Animation Scripting 动画脚本
  6. 自动控制原理--线性系统的微分方程
  7. 【嵌入式Linux学习七步曲之第五篇 Linux内核及驱动编程】Oops在Linux 2.6内核+PowerPC架构下的前世今生
  8. RGB接口和MPU接口区别
  9. compareTo的用法
  10. PCI总线---深入理解PCI总线