匿名用户
1级
2011-05-06 回答
1L说的理论才是正确的,2L说的东西也是对的,但是2L说的和你现在出现的这个错误无关,我想1个时间片对于这个程序来说,是绝对可以把几行代码执行完的,从CPU指令的时间上也可以推出来。从上面可以非常明显的看出来,关键是第一次输出的问题,其实你的多线程代码问题很多,但是在你这个程序里表现不出来。
为了解释一些东西,先解释一些概念。其实你说这个问题如果往深处说就复杂了,只能简单的去说
时间片:CPU对线程的执行,是通过分配时间片来实现的,即每个线程每次运行都有一个时间限制,不能超过这个时间,这个时间的最大程度就是时间片(如果不考虑抢占的问题,时间片是一定的,即每个线程每次都运行一个完整的时间片的时间)
线程调度算法:CPU对线程的调度,是有一个算法来决定调度系统所有线程的先后顺序(这里为了方便解释,我全部认为是核心线程,而不存在用户线程,用户线程是通过进程间接调度的,即CPU并不知道有用户线程存在,而核心线程是CPU直接知道的并且直接调度的)。那算法是怎么样的,历史上有无数种线程调度算法,作为一个程序员,你只能认为是不可知的,即你要保证无论哪个线程先执行,程序都是一致的。这个算法由操作系统决定。
取你的代码的关键部分
SLEEP函数:这个函数到底做了什么,两件事,1放弃时间片立即让操作系统进行下一次调度,2定时让自己变得可以重新调度(你设定的时间内此线程是不可调度的)
Tsleep1 T1= new Tsleep1();