`
weitao1026
  • 浏览: 1059834 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JAVA的线程可以在多个CPU上运行么?

阅读更多
这个是我一个技术相当好的哥们去面试的时候碰到的奇葩问题,那天,这个面试官的答案是不能。后来就带着这个问题去国内外的论坛上搜了一把,也是各说纷纭,实在是没有一个统一的答案,简直有点公说公有理,婆说婆有理的架势。

    几个意见大致如下,第一,不能,因为“进程是CPU进行调度的单位,而JVM是一个进程,于是就只能跑在一个CPU上”。第二,“进程是CPU进行调度的单位,这没错,但是OS负责将一个进程在不同的CPU上调度到另外一个CPU上,而这个进程,则是由不同的线程构成的,那么说,线程还是在不同的CPU上运行了”。我更倾向于第二种解释,于是核心问题就变成了讨论“JVM能不能够将线程安排到不同的CPU上去运行呢?”。


    最终,在SUN公司授权的《Java核心技术》,第7版卷II,第8版卷I,有关于“可运行线程”中,找到如下两句话:


    “今天,人们很可能有单台拥有多个CPU的计算机,但是,并发执行的进程数并不是CPU数目制约的。操作系统的时间片分配给每一个进程,给人并行处理的感觉”。


    好吧,上面的这句话,并不能说明这个答案,但是当我看到下面的这句原话的时候,感觉答案就在这里了:




    "在具有多个处理器的机器上,每一个处理器运行一个线程,可以有多个线程并行运行。当然,如果线程的数目多于处理器的数目,调度器依然采用时间片机制"。这句话足以用来反驳那个出问题的人了,因为他的答案本身就是错的。




    尽管,尽信书不如无书,但是,还能有更好的选择么?带着这个问题,继续走下去~ Fighting~  ziwen@163.com  I enjoy PM、Java、Oracle. I'm an English lover as well~ ho ho~




后记:

更详细的信息可以参见有关Java虚拟机实现的“并发”系列讲解,基本上每本关于Java虚拟机有关的书籍以及官方文档都会讲到JVM如何实现线程的几种方式。 基于系统内核,基于用户线程等等实现。JVM中的线程实现是本地化的~ 本地化的意思就是与平台有关了,尽管与平台有关,但是线程调度,仍旧是最佳高效的方式,有资料曾说过:线程的创建销毁与调度的开销是进程的三十分之一。
分享到:
评论

相关推荐

    java多线程Demo

    Java线程有10个优先级(MIN_PRIORITY, NORM_PRIORITY, MAX_PRIORITY),默认优先级是NORM_PRIORITY。但是,线程优先级并不保证绝对的执行顺序,操作系统调度策略可能影响实际执行顺序。 7. join()方法: 一个线程...

    JAVA单线程多线程

    在Java编程环境中,单线程指的是程序执行过程中只有一个线程在运行。这意味着任何时刻只能执行一个任务,上一个任务完成后才会进行下一个任务。单线程模型简化了程序设计,降低了程序复杂度,使得开发者可以更专注于...

    javad多线程

    Java 多线程编程是指在一个程序中可以运行多个线程,以提高程序的执行效率和响应速度。在 Java 中,多线程编程可以通过 Thread 类和 Runnable 接口来实现。 为什么需要多线程? 在单线程程序中,如果某个任务需要...

    Java多线程知识点总结

    Java多线程是Java编程语言中一个非常重要的概念,它允许开发者在一个程序中创建多个执行线程并行运行,以提高程序的执行效率和响应速度。在Java中,线程的生命周期包含五个基本状态,分别是新建状态(New)、就绪...

    Java多线程机制(讲述java里面与多线程有关的函数)

    线程代表了程序中的执行流,可以在不同的线程之间切换以共享CPU时间。线程的状态包括新建、运行、中断和死亡。线程的生命周期始于新建,通过调用start()方法进入就绪状态,然后可能进入运行、阻塞或等待,最后在run...

    Java的多线程(java基础)

    Java的多线程是其编程语言中的一个重要特性,允许在单个程序中同时执行多个任务,从而提高程序的效率和响应性。理解多线程对于Java开发者至关重要,尤其对初学者来说,是掌握高级编程技巧的基础。 首先,我们需要...

    Java多线程英文版

    - **多CPU运行**:一个应用程序可以在任意数量的CPU上运行,无需修改代码。 #### 三、多线程库简介 目前存在多种多线程库,其中最主流的是: - **POSIX线程(Pthreads)**:由POSIX标准定义,被大多数Unix系统所...

    java经典多线程面试题

    在Java中,多线程是一种非常重要的编程概念,它允许在单一程序中同时运行多个线程来执行不同的任务,从而提高程序的执行效率和资源利用率。Java提供了丰富的API和语言特性来支持多线程编程。以下是一些经典的多线程...

    Java线程.ppt

    Java线程允许程序在同一时间执行多个不同的任务,从而提高了程序的效率和响应性。在燕山大学信息学院计算机系的课程中,李峰教授讲解了Java线程的多个关键知识点。 首先,线程是一个程序内部的顺序控制流,它是执行...

    JAVA多线程模型详解

    由于多个线程可以共享进程的内存和资源,因此在多线程环境下需要考虑同步问题,以防止多个线程同时访问同一资源导致数据不一致。Java提供了synchronized关键字来控制方法或者代码块的并发访问,确保同一时刻只有一个...

    java多线程课件

    Java多线程是Java编程中的重要概念,它允许程序同时执行多个任务,提高了程序的并发性和效率。在Java中,线程是程序执行的基本单元,是轻量级的进程,它们共享同一份代码和数据空间,但每个线程有自己的栈和程序...

    java线程.pdf

    通过创建多个线程,可以实现并发执行任务,提高程序的运行效率和响应速度。线程在Java中可以通过两种方式创建:继承`Thread`类或者实现`Runnable`接口。 #### 继承Thread类 ```java class MyThread extends Thread...

    java多线程文件传输

    - **Java线程实现方式**:通过实现`Runnable`接口或继承`Thread`类创建线程。推荐使用`Runnable`,因为它可以避免单继承的限制,更符合面向对象设计原则。 2. **多线程的创建与启动** - **创建线程**:创建`...

    第15讲 Java多线程.ppt

    * 线程是某一程序内部的执行单元,多个线程可以在同一时间内执行多个任务。 进程和线程的区别: * 进程是由操作系统管理的,而线程是在一个程序内部的。 * 进程之间的代码、内部数据和状态都是独立的,而一个程序...

    史上最全 Java 多线程面试题及答案.docx

    本文总结了 Java 多线程的知识点,涵盖了多线程的用途、创建线程的方式、start() 方法和 run() 方法的区别、Runnable 接口和 Callable 接口的区别、CyclicBarrier 和 CountDownLatch 的区别等多个方面,旨在帮助读者...

    Java多线程编程指南

    一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。 多线程是多任务的一种特别的形式,但多线程使用了更小的资源开销。 这里定义和线程相关的另一个术语 - 进程...

    Java多线程编程总结

    #### 十四、Java线程:新特征-锁(上)&(下) - `java.util.concurrent.locks` 包提供了更高级别的锁实现,如 `ReentrantLock`、`ReadWriteLock` 等。 - 这些锁提供了比内置锁更多的功能,如公平性选择、尝试锁、...

    Java多线程下载网络图片

    总之,"Java多线程下载网络图片"这个案例涵盖了多线程编程的多个核心知识点,包括线程创建、同步机制、线程池管理和异常处理等。通过实践这些技术,开发者可以编写出更加高效、稳定、健壮的并发程序。

    java 多线程课件

    Java多线程是Java编程中的一个重要概念,它允许程序同时执行多个任务,从而提高了程序的效率和响应速度。在Java中,多线程支持是语言级别的,这意味着开发者可以轻松地创建和管理并发执行的线程。 首先,我们要理解...

    java 多线程.ppt,多线程

    当所有非守护线程结束时,JVM会停止运行,即使还有守护线程在运行。通过setDaemon(true)方法可以将线程设置为守护线程。 理解并熟练掌握Java多线程技术对于开发高效、稳定和响应迅速的应用程序至关重要。无论是处理...

Global site tag (gtag.js) - Google Analytics