黑马程序员技术交流社区

标题: 多线程一个执行权小问题 [打印本页]

作者: 葛奎    时间: 2012-6-23 09:38
标题: 多线程一个执行权小问题
假如有t1,t2两个线程  t1与t2中分别有wait(),notify()函数
如果t1中执行到notify()进行唤醒冻结的t2的操作时      
这个时候,cpu立刻执行t2吗   还是t2被唤醒之后,t1与t2还是并发的抢cpu执行权??


作者: 孙峰    时间: 2012-6-23 09:52
t2被唤醒之后并不是立刻执行,也是进入一种临时状态,具备运行资格,没有运行权,同样来和别的线程争夺资源。
作者: 王明明    时间: 2012-6-23 09:56
你看多线程的输出结果没?假如你没设置同步的话 是随机 抢执行权的
既然都设置了wait(),notify() 等待 唤醒 机制 那同步 估计也会设置吧 当然不排除没...
同步还一个对象问题 都必须是同一个对象才行
设置了同步 等待 唤醒 机制 可以实现轮流操作 执行权的问题
具体的还要看你怎么写代码
作者: 郑文博    时间: 2012-6-23 11:15
首先不是t1执行到notify(),而是主线程执行到的。 这时t1会进入临时状态(阻塞),t2线程执行。
t1,t2都具备运行资格,因为notify()的存在,t2拥有执行权。
作者: 黑马-李勇    时间: 2012-6-23 11:32
唤醒只能说明把那个进程叫醒了,就是说被叫醒的进程有执行的权限,但正在运行的进程不一定要释放权,所以被叫醒的进程处于等待状态
作者: 邓杰    时间: 2012-6-23 12:32
这个时候的t1只是具备了执行资格,并不一定就会马上执行;因为cpu这个时候肯定不是只有t1和t2这两个线程在执行吧;cpu可能会执行其它的程序;等它执行到t1的时候会进行一下判断t1是否有执行资格:有那么就开始执行;同样cup也可能执行到t2一判断发现t2没有执行资格;所以t2就不被执行;会去执行其它程序;所以t1,t2仍然在并发的抢夺执行权;只是抢到后有没有资格执行的问题;
作者: 黄连兵    时间: 2012-6-23 12:39
有个实际的例子,电视娱乐节目,每次随机抽取多个幸运观众,抽到了,这些观众上台再进行PK,胜者就可以进入下一环节,赢取奖品。(执行程序)其他观众就等着呗,只有看的份,不行自个睡会~!
抽奖结束下一轮开始了哈!~主持人一声令下,(notifyAll)全精神了~大家都在抢镜头,接着随选取下一个幸运观众......但是不知道会选到谁!~
notify()只会随机唤醒一个等待线程。让被唤醒的线程参与争夺CPU执行权,但是能不能争取到,也是不确定的。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2