`
gao_xianglong
  • 浏览: 461784 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

剖析Java线程到底是并行还是并发

阅读更多

《剖析Java线程到底是并行还是并发》

 

我们都知道线程是最基本的执行单元,包含在进程内部,也就是说,进程是由线程构成。那么当我们编写多线程的时候,大部分教科书上都是称其为并发,而非是并行,这2种截然不同的概念,完全误导了一些同学。

 

并发:多线程运行在同一个CPU内,CPU不停做上下文切换执行任务,单位时间内只有一个线程在运行;

并行:多线程运行在多核心CPU内,同时执行任务;

 

在笔者面试过的部分开发人员中,有些人会觉得Java线程被包裹在1个JVM进程内部,然而一个JVM进程运行在某一个CPU上,那么Java的线程就是并发的,只有利用特殊API比如fork-join等框架写出来的代码才是高深的并行代码,bullshit!

 

来看看下面这段代码:

for (int i = 0; i < 100; i++) {
 new Thread(() -> {
  for (int j = 0; j < Integer.MAX_VALUE; j++)
   UUID.randomUUID().toString();
 }).start();
}

 

大家觉得是并行,还是并发,先来看看CPU负载:

是的,你没看错,我这就是Alienware 17寸顶配的CPU I7 6820-HK,笔记本CPU中的王者。

 

当多线程在跑时,所有的CPU核心都有负载,也就是说,线程确实是并行的。解释一下,现代操作系统是将线程最为最小的调度单位(由内核负责管理),进程作为资源分配的最小单位。由于进程是不活动的,只是纯粹作为存储线程的容器。也就是说,Java线程尽管被包裹在JVM进程内部,但是CPU调度的是进程中的线程。

 

分享到:
评论
1 楼 daniaowansui 2018-03-01  
楼主说的太简单了,也太浅显了。只从WINDOW系统的一次实验就的出了结论,而没有考虑JVM对线程的影响。是否并行跟硬件CPU个数和操作系统密切相关,这个我知道。但JVM本身对线程又有怎样的影响呢?

相关推荐

    java并发编程面试题

    java并发编程 基础知识,守护线程与线程, 并行和并发有什么区别? 什么是上下文切换? 线程和进程区别 什么是线程和进程? 创建线程有哪几种方式?,如何避免线程死锁 线程的 run()和 start()有什么区别? 什么是 ...

    Java 7并发编程实战手册

    java7在并发编程方面,带来了很多令人激动的新功能,这将使你的应用程序具备更好的并行任务性能。 《Java 7并发编程实战手册》是Java 7并发编程的实战指南,介绍了Java 7并发API中大部分重要而有用的机制。全书分为9...

    基于Java多线程的并发机制的研究和实现

    针对高可靠性、高质量的Java并行多任务程序设汁,分析了Java多线程机制的原理及其实现技术.研究了程序并发过程中的同步机制和交互通信机制,比较了基于操作系统级和基于Java多线程级并发机制的实现结构,总结了并发...

    龙果java并发编程完整视频

    第35节线程之间通信之join应用与实现原理剖析00:10:17分钟 | 第36节ThreadLocal 使用及实现原理00:17:41分钟 | 第37节并发工具类CountDownLatch详解00:22:04分钟 | 第38节并发工具类CyclicBarrier 详解00:11:52...

    Java并发编程原理与实战

    线程之间通信之join应用与实现原理剖析.mp4 ThreadLocal 使用及实现原理.mp4 并发工具类CountDownLatch详解.mp4 并发工具类CyclicBarrier 详解.mp4 并发工具类Semaphore详解.mp4 并发工具类Exchanger详解.mp4 ...

    Java并发编程(学习笔记).xmind

    Java并发编程 背景介绍 并发历史 必要性 进程 资源分配的最小单位 线程 CPU调度的最小单位 线程的优势 (1)如果设计正确,多线程程序可以通过提高处理器资源的利用率来提升系统吞吐率 ...

    Java并发编程实战

    本书深入浅出地介绍了Java线程和并发,是一本完美的Java并发参考手册。书中从并发性和线程安全性的基本概念出发,介绍了如何使用类库提供的基本并发构建块,用于避免并发危险、构造线程安全的类及验证线程安全的规则...

    龙果 java并发编程原理实战

    龙果 java并发编程原理实战 第2节理解多线程与并发的之间的联系与区别 [免费观看] 00:11:59分钟 | 第3节解析多线程与多进程的联系以及上下文切换所导致资源浪费问题 [免费观看] 00:13:03分钟 | 第4节学习并发的四...

    突破JAVA万人面试,懂多线程者得天下.zip

    02什么是并发和并行av 03什么是进程和线程avi 04.线程创建继承 thread美avi 05线程创建实现 Runnable接口avi 06线程创建实现 Callable接口avi 07线程创建线程池创建线程avi 08线程创建小结av 09线程生命周期avi 10....

    java并发编程

    第35节线程之间通信之join应用与实现原理剖析00:10:17分钟 | 第36节ThreadLocal 使用及实现原理00:17:41分钟 | 第37节并发工具类CountDownLatch详解00:22:04分钟 | 第38节并发工具类CyclicBarrier 详解00:11:52...

    Java 并发编程原理与实战视频

    java并发编程原理实战 第2节理解多线程与并发的之间的联系与区别 [免费观看] 00:11:59分钟 | 第3节解析多线程与多进程的联系以及上下文切换所导致资源浪费问题 [免费观看] 00:13:03分钟 | 第4节学习并发的四个...

    并行最短路径算法Dijkstra

    (2)并发性分析:最外层顺序执行,内层的两个循环实现并发。 (3)线程处理:生成n个线程,2000个数据。n-2个线程分配给当前始终点最短路径的计算,其中(n-2)/2个线程求最近顶点,(n-2)/2个线程更新最短路径数组。...

    基于线程的并发控制技术研究与应用

    :高效的并发控制策略可以提高系统的并行处理能力、改善交互响应时间。该文讨论了并发编程的复杂性,分析了4种基于线程的并发结构。目前,基于线程的并发控制技术已成功地应用到了分布事务监控器OnceTX中。

    基于Java多线程与线程安安全实践-基于Http协议的断点续传的毕业设计,通过分析用户的网络环境和网络状况,确定合适的分包大小

    设计采用多线程技术,开启多个线程同时处理多个用户的下载请求,提高系统的并发处理能力和吞吐量。同时采用线程安全技术,通过锁的使用避免多个线程同时修改同一资源,保证数据的一致性和准确性。 具体实现中,设计了...

    并行计算导论(原书第2版).[美]Ananth Grama(带详细书签).pdf

    2.3 并行计算平台剖析 2.3.1 并行平台的控制结构 2.3.2 并行平台的通信模型 2.4 并行平台的物理组织 2.4.1 理想并行计算机的体系结构 2.4.2 并行计算机互连网络 2.4.3 网络拓扑结构 2.4.4 静态互连网络评价 ...

    Java性能调优实战——覆盖80%以上的Java应用调优场景

    避免使用Java序列化14讲多线程之锁优化(下):使用乐观锁优化并行操作16讲多线程调优(下):如何优化多线程上下文切换17讲并发容器的使用:识别不同场景下最优容器21讲深入JVM即时编译器JIT,优化Java编译25讲答疑...

    Java多线程中线程的两种创建方式及比较代码示例

    主要介绍了Java多线程中线程的两种创建方式及比较代码示例,简单介绍了线程的概念,并行与并发等,然后通过实例代码向大家展示了线程的创建,具有一定参考价值,需要的朋友可以了解下。

    Intel.Thread.Profiler.英特尔_.线程档案器4

    ●测量应用有效利用的内核数量,确定实际的并行处理性能 &lt;br&gt;英特尔® 线程档案器 3.1 Windows 版同时显示并发视图和时间轴视图,这有助于查看哪部分代码适合并行处理以及应用性能问题源于何处。在图 1 中,...

Global site tag (gtag.js) - Google Analytics