A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 山水游客 中级黑马   /  2012-6-3 14:48  /  1458 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在使用java语言编写多线程程序时,运行结果与操作系统密切相关,即使在同一台机器上,多次运行同一程序,结果也可能不同,为什么会是这样子的呢,请大家帮忙解释一下,谢谢。

4 个回复

正序浏览
我的总结:
1,这个是因为线程的执行权CPU分配的,CPU有自己的给多线程分配资源的分配策略。这个我们是很难控制的。

2,多线程的目的是为了最大限度的利用CPU资源。Java编写程序都运行在在Java虚拟机(JVM)中,在JVM的内部,程序的多任务是通过线程来实现的。   
  每用java命令启动一个java应用程序,就会启动一个JVM进程。在同一个JVM进程中,有且只有一个进程,就是它自己。在这个JVM环境中,所有程序代码的运行都是以线程来运行。
3,操作系统里面看到过:
   实际上,操作的系统的多进程实现了多任务并发执行,程序的多线程实现了进程的并发执行。
   多任务、多进程、多线程的前提都是要求操作系统提供多任务、多进程、多线程的支持。
 在Java程序中,JVM负责线程的调度。线程调度是值按照特定的机制为多个线程分配CPU的使用权

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
在Java程序中,JVM负责线程的调度。线程调度是值按照特定的机制为多个线程分配CPU的使用权。
调度的模式有两种:分时调度和抢占式调度。分时调度是所有线程轮流获得CPU使用权,并平均分配每个线程占用CPU的时间;抢占式调度是根据线程的优先级别来获取CPU的使用权。JVM的线程调度模式采用了抢占式模式。
在每个时钟周期内,CPU实际上只能去执行一条(也有可能多条)指令。操作系统将进程线程进行管理,轮流(没有固定的顺序)分配每个进程很短的一段是时间(不一定是均分),然后在每个线程内部,程序代码自己处理该进程内部线程的时间分配,多个线程之间相互的切换去执行,这个切换时间也是非常短的。
JAVA多线程运行的机制是虚拟CPU,也就是划分时间片,划分的时间片可以看做是单个CPU在执行任务,因为时间片很短,所以每个时间片可能执行的线程就不确定拉,所以程序运行就可能出现多种不同的运行结果。

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
你没办法控制CPU的,它的执行顺序是根据调度算法算出来的,每一次都不一样
回复 使用道具 举报
这是因为线程的执行权是由你电脑的CPU分配的,CPU有自己的线程调度算法,线程执行有具体的算法控制的,每次分配的先后顺序是一般来说是不一样的。所以每次的执行结果不同。具体的你可以看看操作系统的知识。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马