您好,登錄后才能下訂單哦!
本篇內容主要講解“Java中ThreadGroup的原理和使用方法”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Java中ThreadGroup的原理和使用方法”吧!
Thread類有多個構造函數,其中一個如下:
public Thread(ThreadGroup group, String name) { init(group, null, name, 0); }
傳入一個ThreadGroup參數,表示當前線程所屬的線程組。源碼中上面的init最終實現如下:
private void init(ThreadGroup g, Runnable target, String name, long stackSize, AccessControlContext acc, boolean inheritThreadLocals) { ...... if (g == null) { g = parent.getThreadGroup(); } }
可知:如果沒有設置這個線程組,那么創建的線程的線程組即為其父線程的線程組,也就是當前線程。如果當前線程是main線程,main線程的group名字也叫main,那么在main方法中創建的新線程的group也是main。本文就ThreadGroup類進行學習。
線程有父子之稱,線程組也有父子之稱。
ThreadGroup類的構造函數有:
public ThreadGroup(ThreadGroup parent, String name); public ThreadGroup(String name) { this(Thread.currentThread().getThreadGroup(), name); }
構造函數可以指定當前創建的線程組的父線程組,如果沒有指定就指定當前線程的線程組作為新創建的線程組的父線程組。
下面是一個demo進行驗證,結果打印為true。
public static void main(String[] args) throws Exception { ThreadGroup threadGroup = Thread.currentThread().getThreadGroup(); ThreadGroup threadGroup1 = new ThreadGroup("threadGroup1"); System.out.println(threadGroup1.getParent() == threadGroup); }
一個線程組中可以添加多個線程和子線程組,可以使用其復制方法,復制出這些線程和線程組:
public int enumerate(Thread list[]); public int enumerate(Thread list[], boolean recurse);
參數recurse為true表示遞歸將所有子線程組中的線程也拷貝到數組中,如果沒有這個參數,默認就是true。
除了拷貝線程組中的線程以外,還可拷貝線程組中的子線程組:
public int enumerate(ThreadGroup list[]); public int enumerate(ThreadGroup list[], boolean recurse);
recurse意思也是表示是否進行遞歸和拷貝。
線程組不是用來管理線程的,而是針對線程的一次組織。
到此,相信大家對“Java中ThreadGroup的原理和使用方法”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。