黑马程序员技术交流社区
标题:
请问各种大神问题
[打印本页]
作者:
dengjiaqiang
时间:
2016-5-11 23:15
标题:
请问各种大神问题
public class Sha implements Runnable{
private int a=1;
public void run(){
for(int i=0;i<1000;i++){
synchronized(this){
a+=1;
try{
Thread.sleep(500);
}catch(InterruptedException e){
throw new RuntimeException(e);
}
a-=1;
System.out.println(Thread.currentThread().getName()+":第一"+a);
}
}
}
public void go(){
for(int i=0;i<1000;i++){
System.out.println(Thread.currentThread().getName()+":第二"+i);
Thread.yield();
}
}
public static void main(String args[])throws InterruptedException{
Sha sha=new Sha();
Thread no=new Thread(sha);
Thread no1=new Thread(sha);
no.start();
no1.start();
sha.go();
}
}
上面这个程序运行的时候 大家都知道 主线程 sha.go()和这两个线程no.start();no1.start();
书上说的是no.start()线程启动 运行到Thread.sleep(500)时候 no.start()线程睡眠 ,放弃当前线程,而主线程sha.go();有机会获得cpu,进入运行状态
no1.strat()线程因为没有得到Sha的对象锁。
但是 我在运行中发现 主线程根本没获得运行权,倒是 no1.strat()获得啦线程权,而且还运行出结果啦;
请问下这个是什么问题?
作者:
lvlup200
时间:
2016-5-11 23:23
在no和no1线程开启前, 需要一点点时间, 但是在此之前, main线程就获得了cpu的执行权, 一瞬间将go()方法执行完毕, 此时no线程和no1线程开启了, 开始执行循环语句. 所以, main线程早就执行完了. 并不是没抢到执行权
作者:
善良的死神达乐
时间:
2016-5-12 00:18
lvlup200 发表于 2016-5-11 23:23
在no和no1线程开启前, 需要一点点时间, 但是在此之前, main线程就获得了cpu的执行权, 一瞬间将go()方法执行 ...
6666666666666666666
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2