如果ThreadB没有执行notify(),下面的代码如何执行,ThreadA应该保持在等待状态。 当另一个线程完成其执行时,线程是否可能从等待状态中退出。
public class ThreadA extends Thread
{
public static void main(String[] args)
{
ThreadB B = new ThreadB();
B.start();
synchronized (B) {
try {
/* Go into waiting state */
B.wait();
} catch (InterruptedException e) {
}
System.out.println(B.result);
}
}
}
class ThreadB extends Thread
{
int result;
public void run()
{
synchronized (this) {
for (int i = 0; i <= 10; i++) {
result = result + i;
}
// notify();
}
}
}
输出:
55
答案 0 :(得分:1)
如果你转到JavaDocs(http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#join())并阅读Thread的文档,你会发现它永远不会在线程上使用wait,notify或notifyAll。在内部,Thread.join()和线程死亡使用wait和notifyAll来完成连接功能
答案 1 :(得分:1)
当线程结束/存在时,它将在其实例上chrome.browserAction.onClicked.addListener(function(tab) {
setInterval(function () {
chrome.tabs.query({currentWindow: true}, function(tabs) {
var foundSelected = false;
for(var i = 0; i <= tabs.length; i++){
if(i == tabs.length){
i = 0;
}
if (tabs[i].active){
foundSelected = true;
}
// Finding the next tab.
else if (foundSelected){
// Selecting the next tab.
chrome.tabs.update(tabs[i].id, {active: true});
chrome.tabs.reload(tabs[i].id);
return;
}
}
});
}, 5000);
});
。这就是你所看到的。