JavaRush /Java Blog /Random-JA /スレッドグループ
Core
レベル 35
Екатеринбург

スレッドグループ

Random-JA グループに公開済み
こんにちは、明けましておめでとうございます! マルチスレッド、つまり ThreadGroup についてもう少し理解してください。Googleで検索して読んで、主な本質を理解しました。目的はセキュリティであり、グループの組織化による統合管理です。
スレッドは、管理性とセキュリティ上の理由からスレッド グループにグループ化されます。1 つのスレッド グループは別のグループに属することができ、メイン (システム) グループを最上位とする階層を形成します。グループに属するスレッドは同時に制御できます。グループ内のすべてのスレッドの作業を一度に中断したり、それらのスレッドに単一の最大実行優先値を設定したりする権利があります。スレッド グループは、セキュリティ ドメインの定義にも使用できます。通常、グループ内のスレッドには相互に影響を与える可能性があり、それは入れ子になったグループのスレッドにも当てはまります。「影響を与える」というときは、メソッド呼び出しがスレッドの動作に影響を与える可能性があること (優先順位を変更したり、中断を引き起こしたりするなど) を意味します。
(出典:タイツ)
単一のスレッドが停止し始めて、連続してすべてのスレッドが中断されるのを防ぐために、グループの概念が導入されました。スレッドは、それと同じグループ内のスレッドにのみ影響を与えることができます。スレッド グループは ThreadGroup クラスによって表されます。この構成により、フローを望ましくない外部の影響から保護できます。スレッド グループには他のグループを含めることができ、すべてのスレッドとグループを、ルート オブジェクトを除く各 ThreadGroup オブジェクトが親を持つ階層ツリーに編成できます。
(出典: Tyts ) さまざまな記事を読んだ後、あるグループの 1 つのスレッドから別のグループのフローを中断できないような小さなコードを書くことにしました。そして、何かがうまくいきませんでした。割り込み((( 私のコード: なぜ割り込みが可能ですか? 出力は次のとおりです: public class Test { public static ArrayList threads = new ArrayList (); public static ArrayList groups = new ArrayList (); public static void main(String[] args) throws InterruptedException { final ThreadGroup group1 = new ThreadGroup("GROUP 1"); final ThreadGroup group2 = new ThreadGroup("GROUP 2"); final ThreadGroup group3 = new ThreadGroup("GROUP 3"); groups.add(group1); groups.add(group2); groups.add(group3); for (int i = 0; i < groups.size(); i++) { for (int j = 1; j < 5; j++) { Thread thread = new Thread(groups.get(i), "THREAD №" + j) { @Override public void run() { while (!isInterrupted()) { try { Thread.sleep(500); } catch (InterruptedException e) { System.out.println(getName() + " : " + getThreadGroup().getName() + " прервана"); } } } }; threads.add(thread); thread.start(); } } Thread thread = new Thread(group1, "THREAD №5") { @Override public void run() { group2.interrupt(); while (true); } }; thread.start(); threads.add(thread); for (Thread t : threads) System.out.println(t); } } Thread[THREAD №1,5,GROUP 1] Thread[THREAD №2,5,GROUP 1] Thread[THREAD №3,5,GROUP 1] Thread[THREAD №4,5,GROUP 1] Thread[THREAD №1,5,GROUP 2] Thread[THREAD №2,5,GROUP 2] Thread[THREAD №3,5,GROUP 2] Thread[THREAD №4,5,GROUP 2] Thread[THREAD №1,5,GROUP 3] Thread[THREAD №2,5,GROUP 3] Thread[THREAD №3,5,GROUP 3] Thread[THREAD №4,5,GROUP 3] Thread[THREAD №5,5,GROUP 1] THREAD №1 : GROUP 2 прервана THREAD №2 : GROUP 2 прервана THREAD №4 : GROUP 2 прервана THREAD №3 : GROUP 2 прервана
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION