Java スレッド ダンプは、スタック メモリ内のすべてのライブ処理スレッドのダンプとして定義されます。これは、スパイク、デッドロック、メモリの問題、いくつかのデフォルトのエラー コードで応答しないアプリケーションなどの CPU 使用率を診断するためのアーティファクトにおいて重要な役割を果たします。また、他のシステム関連の問題も計算され、スレッドに関連している場合でも、いくつかのデフォルトのエラー コードが表示されて、リクエストと応答時間が短縮されます。ダンプ メッセージはアプリケーション サーバーに基づいてサーバー構成ファイルに設定されます。主に、JVM で定期的に使用される複数のスレッド ダンプと少なくとも 10 個のダンプ スレッドに推奨されます。
無料ソフトウェア開発コースを始めましょう
Web 開発、プログラミング言語、ソフトウェア テスト、その他
Java プログラミング言語を使用すると、より洗練された Web アプリケーションを作成するために使用されるデフォルトのクラスとメソッドを使用できます。ここで、スレッド ダンプはここのツールを使用して分析されます。 Java スレッド ダンプの基本構文は次のとおりです。
class className { public static void main(String[] args) throws Exception { Object o = new Object(); Object o1= new Object(); Thread t=new Thread(new DeadLockRunnable(o,o1)); t.sleep(); --some java code logics--- } }
上記のコードは、デッドロックなどの概念を利用してスタック メモリにスレッド ダンプを作成するための基本的な構文です。さらに、DeadLockRunnable、ManagementFactory.getThreadMXBean(); などのいくつかのデフォルト メソッドを使用できます。これらは、プログラミング スタックでスレッド ダンプを実現するためのいくつかの方法です。
Java アプリケーションでは、ブラウザとデスクトップ (スタンドアロン アプリケーションの場合) の両方でアプリケーションを実行するために Web サーバーとアプリケーション サーバーを使用しました。 Web サーバーを使用しているため、多数の同時ユーザーが処理するために数十から数百のスレッドにアクセスする必要があります。アプリケーションが複数のユーザーからアクセスされる場合、つまり、2 人以上のユーザーが同じリソースに同時にアクセスする場合、2 つのスレッド間の競合は避けられず、デッドロックが発生する場合もあります。 Web サーバーに基づいて、スレッド ダンプは次のように構成されます。 Apache tomcat は、
スレッド ダンプには、アプリケーション ユーザーが生きているかどうかを示すさまざまな状態があります。それ以外の場合、Keep-Alive-Timer もスレッド名です。これは、KeepAliveCache スレッドを作成するために使用する必要があります。これは、生きている http スレッドのために必要です。 JVM を使用して作成されたすべてのスレッドは、スレッド状デーモンの後に開始されるため、最後に実行されていたスレッドからの JVM がマシンとアプリケーションの両方でシャットダウンするのを防ぐことはできません。
Runnable、Waiting/Timed_waiting、Blocked などの最も重要なスレッドの状態は、アプリケーションまたはプロセスがマルチスレッドである場合、スレッドが作成されるたびにスレッドのブロックと待機に使用されるいくつかの状態です。自動は、スレッドの優先度に関連するいくつかのメタデータ (スレッドを実行しているスレッドが実行可能モードの場合、OS スレッド優先度など) の後に Runnable インターフェイスに移動します。 ブロック状態は、アプリがマルチスレッドの完了後にスレッドをブロックするために使用されます。一方のスレッドは、ロック状態になるまで他方のスレッドが実行されるため、同期スレッド ブロックなどの概念とそのインスタンスを使用して、これが実現されます。待機ステータスとは、スレッドの待機時間が計算され、これらの状態で動作するのを待っていたスレッド プールと呼ばれるスレッド メモリに格納されています。
さまざまな例を以下に示します:
コード:
package com.first; import java.net.ServerSocket; import java.net.Socket; public class Example { public void run() { System.out.println("Multithreads names are : " + Thread.currentThread().getName()); } public static void main(String[] args) throws Exception { long waitingtimethread = 2000 * 30 * 2; long startingthread = System.currentTimeMillis(); Thread t = new Thread(); t.start(); Thread.sleep(300); t.run(); try ( ServerSocket s = new ServerSocket(3000); Socket s1 = s.accept() ) { Thread t1 = new Thread(); t1.start(); while (t1.isAlive()) { if (demo(startingthread, waitingtimethread, t1)) { t1.interrupt(); t1.join(); } } } catch (Exception e) { System.err.println("The Excetion will be captured here."+e); } System.out.println("Multithreads names are : " + Thread.currentThread().getName()); System.out.println("We can check the daemon thread is used or not: " + Thread.currentThread().isDaemon()); } static boolean demo(long startingthread, long waitingtimethread, Thread t1) { return ((System.currentTimeMillis() - startingthread) > waitingtimethread) && t1.isAlive(); } }
出力:
コード:
package com.first; import java.net.ServerSocket; import java.net.Socket; public class Example { static boolean demo(long startingthread, long waitingtimethread, Thread t1) { return ((System.currentTimeMillis() - startingthread) > waitingtimethread) && t1.isAlive(); } public static void main(String[] args) throws Exception { long waitingtimethread = 2000 * 30 * 2; long startingthread = System.currentTimeMillis(); Thread t = new Thread(); Thread t2 = new Thread(); t.start(); Thread.sleep(300); t.run(); try ( ServerSocket s = new ServerSocket(3000); Socket s1 = s.accept() ) { Thread t1 = new Thread(); t1.start(); while (t1.isAlive()) { if (demo(startingthread, waitingtimethread, t1)) { t1.interrupt(); t1.join(); t1.notifyAll(); t2.notify(); } } } catch (Exception e) { e.printStackTrace(); } System.out.println("Multithreads names are : " + Thread.currentThread().getName()); } }
出力:
コード:
package com.first; public class Example extends Thread { public void run() { System.out.println("Multithreads names are : " + Thread.currentThread().getName()); System.out.println("We can check the daemon thread is used or not: " + Thread.currentThread().isDaemon()); } public static void main(String[] args) { Example e1 = new Example(); Example e2 = new Example(); e1.start(); e1.setDaemon(true); e2.start(); } }
出力:
上記の 3 つの例では、スレッド ダンプの概念にさまざまなシナリオを使用しました。また、notify()、Timed_Waiting()、sleep() など、さまざまな種類の組み込みスレッド メソッドを使用しました。これらの同時静的メソッドは、java.
内の複数のスレッドのダンプを実現します。一般に、スレッド ダンプは、Java ベースの Web アプリケーションが詳細な分析レポートを取得するための便利なメカニズムです。これには、アプリケーションに直接または間接的にアクセスする複数のユーザーが含まれます。これらのプロセスは、中断を解決し、アプリケーションのパフォーマンスを向上させるのに役立ちます。
以上がJava スレッド ダンプの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。