黑马程序员技术交流社区
标题:
多线程问题
[打印本页]
作者:
山水游客
时间:
2012-6-3 14:48
标题:
多线程问题
在使用java语言编写多线程程序时,运行结果与操作系统密切相关,即使在同一台机器上,多次运行同一程序,结果也可能不同,为什么会是这样子的呢,请大家帮忙解释一下,谢谢。
作者:
何拴绪
时间:
2012-6-3 14:54
这是因为线程的执行权是由你电脑的CPU分配的,CPU有自己的线程调度算法,线程执行有具体的算法控制的,每次分配的先后顺序是一般来说是不一样的。所以每次的执行结果不同。具体的你可以看看操作系统的知识。
作者:
丰亚彬
时间:
2012-6-3 14:59
你没办法控制CPU的,它的执行顺序是根据调度算法算出来的,每一次都不一样
作者:
黑马—陈磊
时间:
2012-6-3 15:06
在Java程序中,JVM负责线程的调度。线程调度是值按照特定的机制为多个线程分配CPU的使用权。
调度的模式有两种:分时调度和抢占式调度。分时调度是所有线程轮流获得CPU使用权,并平均分配每个线程占用CPU的时间;抢占式调度是根据线程的优先级别来获取CPU的使用权。JVM的线程调度模式采用了抢占式模式。
在每个时钟周期内,CPU实际上只能去执行一条(也有可能多条)指令。操作系统将进程线程进行管理,轮流(没有固定的顺序)分配每个进程很短的一段是时间(不一定是均分),然后在每个线程内部,程序代码自己处理该进程内部线程的时间分配,多个线程之间相互的切换去执行,这个切换时间也是非常短的。
JAVA多线程运行的机制是虚拟CPU,也就是划分时间片,划分的时间片可以看做是单个CPU在执行任务,因为时间片很短,所以每个时间片可能执行的线程就不确定拉,所以程序运行就可能出现多种不同的运行结果。
作者:
杨海波
时间:
2012-6-3 15:17
我的总结:
1,这个是因为线程的执行权CPU分配的,CPU有自己的给多线程分配资源的分配策略。这个我们是很难控制的。
2,多线程的目的是为了最大限度的利用CPU资源。Java编写程序都运行在在Java虚拟机(JVM)中,在JVM的内部,程序的多任务是通过线程来实现的。
每用java命令启动一个java应用程序,就会启动一个JVM进程。在同一个JVM进程中,有且只有一个进程,就是它自己。在这个JVM环境中,所有程序代码的运行都是以线程来运行。
3,操作系统里面看到过:
实际上,操作的系统的多进程实现了多任务并发执行,程序的多线程实现了进程的并发执行。
多任务、多进程、多线程的前提都是要求操作系统提供多任务、多进程、多线程的支持。
在Java程序中,JVM负责线程的调度。线程调度是值按照特定的机制为多个线程分配CPU的使用权
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2