`
gao_xianglong
  • 浏览: 467760 次
  • 性别: 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本身对线程又有怎样的影响呢?

相关推荐

    Java8并行流中自定义线程池操作示例

    Java8并行流中自定义线程池操作示例主要介绍了Java8并行流中自定义线程池操作,结合实例形式分析了并行流的相关概念、定义及自定义线程池的相关操作技巧。 1. 概览 Java8引入了流的概念,流是作为一种对数据执行...

    JAVA线程第三版

    11. **并发性能分析与调优**:如何监控和分析线程性能,以及如何优化多线程程序,提高系统效率。 通过学习《JAVA线程第三版》,开发者可以深入理解Java并发编程的核心概念和技术,掌握在实际项目中设计和管理并发...

    Java并发实战

    综上所述,《Java并发实战》这本书是从理论和实践两个维度来讲解Java并发编程,强调了对并发场景的分析和解决问题的实践能力,帮助读者克服学习并发编程时的难点。通过这本书,读者可以逐步建立起对并发编程的全面...

    多线程并发技术

    线程dump是一种常见的调试手段,它能够输出线程执行时的快照,便于开发者分析线程在某个特定时刻的状态,从而定位并发问题。在JDK中,jstack工具能够生成线程堆栈跟踪,这可以用来分析死锁和线程状态。 为了保证多...

    Java线程赛马优先级示例.rar

    通过监控和分析线程的行为,我们可以找出瓶颈,提升程序效率。 9. **测试与调试**:这个赛马示例可能包含测试代码,用于验证不同优先级线程的执行行为。使用JUnit或其他测试框架可以帮助我们编写可重复的测试,确保...

    Java线程入门

    - **并发容器**:Java并发工具包提供了一系列专门用于多线程环境下的容器类,如`ConcurrentHashMap`、`CopyOnWriteArrayList`等,这些容器类在设计时考虑了线程安全性问题,可以减少同步开销。 #### 八、结语 通过...

    Java 并发编程实战.pdf

    根据提供的信息,“Java 并发编程实战.pdf”这本书聚焦于Java并发编程的实践与应用,旨在帮助读者深入了解并掌握Java中的多线程技术及其在实际项目中的应用技巧。虽然部分内容未能提供具体章节或实例,但从标题及...

    深入Java多线程和并发编程

    ### 深入Java多线程与并发编程 在当今高度发展的信息技术领域中,随着硬件技术的进步和软件架构设计的复杂化,多线程与并发编程成为提高程序执行效率、增强系统性能的关键技术之一。本篇文章将围绕Java多线程与并发...

    java多线程实现大批量数据导入源码

    本项目以"java多线程实现大批量数据导入源码"为题,旨在通过多线程策略将大量数据切分,并进行并行处理,以提高数据处理速度。 首先,我们需要理解Java中的线程机制。Java通过`Thread`类来创建和管理线程。每个线程...

    java线程 线程学习资料 java线程教程

    - **学习成果**: 学习者能够掌握编写简单的多线程程序的能力,并能够理解和分析使用线程的基本程序。 #### 二、线程基础知识 - **线程定义**: 在计算机科学中,线程是指程序执行流的一个单元,是操作系统调度的基本...

    JAVA 线程实现数据库的主从同步更新

    在这个场景中,线程的使用是关键,因为它们可以并行处理任务,提高系统的效率。下面我们将详细讨论如何使用Java线程来实现这一功能。 首先,我们需要理解线程的基本概念。线程是程序执行的最小单元,一个进程可以...

    Java并发编程实践.pdf

    在Java并发编程中,首先需要理解“并发”(Concurrency)和“并行”(Parallelism)的区别。“并发”指的是多个任务在同一时间段内交替执行,而“并行”则指的是多个任务同时执行。在实际应用中,“并发”更侧重于...

    基于java swing的多线程电梯调度模拟

    在本项目"基于Java Swing的多线程电梯调度模拟"中,我们主要探讨的是如何利用Java的多线程...通过理解和分析这个项目,开发者不仅可以深入理解Java的并发机制,还能掌握如何在实际应用中设计和实现复杂的多线程系统。

    基于Java多线程的预处理迭代并行求解器.zip

    这个名为“基于Java多线程的预处理迭代并行求解器”的项目,显然着重于利用Java语言的多线程特性来优化预处理迭代算法的执行效率。让我们深入探讨一下这个主题涉及的关键知识点。 1. **Java多线程**:Java提供了...

    JAVA多线程端口扫描器

    多线程能提高程序的并发性能,使得端口扫描可以在多个线程中并行进行,大大加快了扫描速度。 3. **Socket编程**:端口扫描主要依赖于Java的Socket类。Socket是TCP/IP协议的一部分,用于在网络中两个应用之间建立...

    java实现多线程的网络并发服务器.pdf

    以上是对"java实现多线程的网络并发服务器.pdf"内容的详细解析,涵盖了问题的提出、国内外研究现状、任务分析、程序功能、运行平台、总体设计、程序类的说明、模块分析、系统测试和结论等多个方面,展示了多线程网络...

    Java多线程编程全部源码

    10. **线程安全的集合**:Java提供了一些线程安全的集合类,如`ConcurrentHashMap`, `CopyOnWriteArrayList`, `BlockingQueue`等,它们在并发环境下能保证数据一致性。 综上所述,"SimpleThread"可能展示了如何创建...

    java多线程.pdf

    ### Java多线程知识点详解 #### 一、Java多线程概述 **Java多线程**是指在Java程序中能够同时执行多个线程的技术。这种技术使得程序可以在多个任务之间并发执行,从而提高了程序的效率和资源利用率。本文将根据...

    C# 关于多线程开发的经典书籍 并发编程经典实例

    《C#并发编程经典实例》是一本专注于C#多线程开发的重要著作,它深入浅出地探讨了在C#环境中进行并发编程的各种技术和实践。并发编程是现代软件开发中的核心概念,尤其在多核处理器普及后,充分利用系统资源、提高...

Global site tag (gtag.js) - Google Analytics