1. 程式人生 > >Java高併發--等待執行緒結束和謙讓

Java高併發--等待執行緒結束和謙讓

針對本格專題我們主要討論join()和yield()這兩個方法。

一、等待執行緒結束

如果我們想要在一個執行緒中獲取到另外一個執行緒的處理結果,那麼 這個時候我們該怎麼辦呢?最好的方式當然就是等待另一個執行緒的結束後再來執行當前執行緒,這個時候就該我們的join()方法上場了。

注意:這個方法一共有兩個過載方法,傳入了時間引數的過載方法表示等待固定的時間,如果在等待的時間結束後等待的執行緒還沒有執行完,這個時候就不管了,依然執行自己的執行緒。另外一個沒有時間引數的就是無限制的等待下去。具體使用方法如下:

public class JoinAndYield {
    public volatile static int i = 0;
    public static class AddThread extends Thread{
        @Override
        public void run(){
            for(i=0;i<10000000;i++);
        }
    }
    public static void main(String[] args) throws InterruptedException {
        AddThread addThread = new AddThread();
        addThread.start();
        addThread.join();
        System.out.printf("i = "+i);

    }
}
上面的程式碼的執行結果如下:
i = 10000000
針對上面的執行結果,我們如果去掉join()方法這行程式碼,就會發現執行結果是i=0。因為這個結果並沒有等待執行緒addThread執行完才執行,所以獲取到的結果i沒有是1000000。

二、謙讓

在一個執行緒要結束或者結束的時候,如果它覺得自己不再需要cpu資源,這個時候就可以呼叫yield()方法來降低自己的優先順序,從而可以把cpu資源讓出給其他執行緒,但是這個時候並不意味之當前執行緒就不需要cpu資源了,只是它佔用的資源的優先順序的變低了。