package?thread;
public?class?TestSleep?implements?Runnable?{
private?int?time?=?10;
private?Object?lock?=?new?Object();
public?static?void?main(String[]?args)?{
//?TODO?Auto-generated?method?stub
TestSleep?a?=?new?TestSleep();
Thread?t1?=?new?Thread(a);
Thread?t2?=?new?Thread(a);
t1.start();
t2.start();
}
@Override
public?void?run()?{
//?TODO?Auto-generated?method?stub
synchronized?(lock)?{
for?(int?i?=?0;?i?<?10;?i++)?{
try?{
if?(time?==?5)
lock.wait();//Thread.sleep(3000);
//lock.notify();
time--;
System.out.println(Thread.currentThread().getName()?+?"****"?+?time);
}?catch?(Exception?e)?{
//?TODO?Auto-generated?catch?block
e.printStackTrace();
}
}
}
}
}運行結果Thread-0****9Thread-0****8Thread-0****7Thread-0****6Thread-0****5按理來說,線程1搶到鎖,然后執行,到wait(),釋放鎖,應該CPU會運行其他線程,為什么運行到這里就停了(沒有完全運行完,沒有真正停止)
多線程wait()釋放鎖嗎?那么這個問題怎么解決。
慕工程2701759
2017-08-02 21:11:01