JAVA學習 多執行緒之控制線程

2021-08-21 10:38:27 字數 2013 閱讀 5264

一、join()加入執行緒

呼叫join()方法後,主線程會進入阻塞,直到呼叫join()的執行緒執行完成,才繼續回到主線程。

join()方法使用思路:join()方法主要由使用執行緒的程式使用,將大問題分解為許多個小問題,每個小問題分配乙個執行緒,當所有小問題都解決完後,再回到主線程進行進一步操作。

class thread1 extends thread

public void run()

}class thread2 implements runnable

}class thread_join

} }}

輸出結果:

mainthread      1

thread-1 1

mainthread 2

thread-1 2

thread-1 3

mainthread 3

thread-1 4

mainthread 4

thread-1 5

mainthread 5 //i=5,主線程進入阻塞,直至thread-2執行完成

thread-1 6

thread-1 7

thread-1 8

thread-1 9

thread-2 1

thread-2 2

thread-2 3

thread-2 4

thread-2 5

thread-2 6

thread-2 7

thread-2 8

thread-2 9

mainthread 6

mainthread 7

mainthread 8

mainthread 9

二、後台執行緒/守護執行緒/精靈執行緒

將執行緒設定為後台執行緒:t.setdaemon(true);

啟動執行緒:t.start();

要設定執行緒為後台執行緒必須在啟動執行緒之前。

可使用isdaemon判斷執行緒是否後台執行緒

如果所有的前台執行緒都死亡,後台執行緒也會自動死亡。

主線程預設是前台執行緒,前台執行緒的子執行緒預設是前台執行緒,後台執行緒的子執行緒預設是後台執行緒。

三、執行緒睡眠sleep()

class testthread

}

上述兩條語句都是使主線程睡眠的語句。

四、執行緒讓步yield()

thread.yield();    //讓當前執行緒讓步

五、改變執行緒優先順序

setpriority(int newpriority);  優先順序範圍為整數的1-10

例如

thread.currentthread().setpriority(6);//如果只有乙個主線程在執行,則當前語句則是設定主線程優先順序為6
thread.currentthread().setpriority(max_priority);//如果只有乙個主線程在執行,則當前語句則是設定主線程優先順序為10
t.setpriority(7);//設定執行緒物件t的優先順序為7

可使用getpriority()獲得當前執行緒優先順序,如:

int i=t.getpriority();

《瘋狂Java講義》 控制線程

上面的程式中有三個執行緒,main執行緒 新執行緒 被join的執行緒 main執行緒 和 新執行緒 會併發執行。當主線程的迴圈變數i等於20時,啟動 被join的執行緒 該執行緒不會和 main執行緒 併發執行,main執行緒 需要等待 被join的執行緒 的執行緒執行結束後才可以繼續向下執行。此...

多執行緒02 如何控制線程執行順序

這裡使用join 方法 api中那句 等待該執行緒終止 主語是join方法被呼叫時所處的執行緒,該執行緒 是指呼叫join方法的執行緒。比如現在有a b兩個執行緒物件,在a執行緒 現b.join 那麼a執行緒將會被阻塞 或者說掛起 直到b執行緒執行完畢才會繼續執行b.join 語句下面的 即繼續執行...

JAVA多執行緒之 執行緒池

執行緒池顧名思義,就是乙個放置執行緒的池子。就跟資料庫連線池差不多。執行緒池通過對併發執行緒的控制,能有效的節省系統資源的浪費,提高系統的效能。學習執行緒池,先了解一下執行緒池的乙個基本結構 executor是乙個介面,其中只有乙個方法,就是execute方法。所以executor實際就是乙個執行緒...