线程从多线程

时间:2016-06-23 17:43:37

标签: java multithreading wait

如果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

2 个答案:

答案 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); }); 。这就是你所看到的。