導航:首頁 > 編程語言 > java監控線程狀態

java監控線程狀態

發布時間:2023-01-14 21:33:32

java 怎麼監控linux上線程是否存在

CPU資源時,按照以下步驟進行查找:
(一):通過【 top -p 12377 -H】 查看java進程的有哪些線程的運行情況;
和通過【jstack 12377 > stack.log】生成Java線程的mp詳細信息;

先用top命令找出佔用資源厲害的java進程id,如圖:# top
如上圖所示,java的進程id為』52554′,接下來用top命令單獨對這個進程中的所有線程作監視:
1 top -p 52554 -H

# top視圖裡面裡面可以通過快捷鍵依次b ,x高亮顯示top的列找出需要的線程,默認CPU排序,Sh

㈡ java如何監控線程是否在運行

判斷是否在運行用isAlive方法哈。。

給你寫了個例子。。不知是不是你想要的。。

public class Thread100 {

/**
* @param args
*/
public static ThreadA ta = new ThreadA();
public static ThreadB tb = new ThreadB();
public static void main(String[] args) {
ta.start();
tb.start();
}

}
class ThreadA extends Thread {
@Override
public void run() {
int i = 0;
while(i < 100) {
if(Thread100.tb.isAlive()) {
System.out.println("B is alive");
}
System.out.println(i);
i++;
}
}
}
class ThreadB extends Thread {
@Override
public void run() {
int i = 0;
while(i < 100) {
if(Thread100.ta.isAlive()) {
System.out.println("A is alive");
}
System.out.println(i);
i++;
}
}
}

㈢ 如何用java代碼來監控系統內存·cpu·線程佔用情況,並生成日誌

可以學習軟體包 java.lang.management
提供管理介面,用於監視和管理 Java 虛擬機以及 Java 虛擬機在其上運行的操作系統。

ClassLoadingMXBean
用於 Java 虛擬機的類載入系統的管理介面。

CompilationMXBean
用於 Java 虛擬機的編譯系統的管理介面。

GarbageCollectorMXBean
用於 Java 虛擬機的垃圾回收的管理介面。

MemoryManagerMXBean
內存管理器的管理介面。

MemoryMXBean
Java 虛擬機內存系統的管理介面。

MemoryPoolMXBean
內存池的管理介面。

OperatingSystemMXBean
用於操作系統的管理介面,Java 虛擬機在此操作系統上運行。

RuntimeMXBean
Java 虛擬機的運行時系統的管理介面。

ThreadMXBean
Java 虛擬機線程系統的管理介面。
更多請訪問(bug315)

㈣ 如何查看一個java進程有多少個線程在工作

理論上來說,如果你全用threadgroup來跑線程的話,有個叫enumerate的方法可以得到【該threadgroup下】所有active的(也就是你說的在工作的)線程以及子線程,但程序裡面不一定是把線程放threadgroup裡面的,有可能有人自己new一個出來run或者別的,所以不能完全依靠這個辦法。我目前想到的辦法,貌似得弄個全局的counter,開個守護線程,讓這個線程去數監控所有線程的狀態,依照線程是否Active去加減這個counter。
還有個懶點的,你看windows的taskmanager(假設你在win平台上的話),裡面有一個column叫做thread
count的,我沒試過到底准不準,不過這個最省事了,右鍵點出來一看就知道了。

㈤ java 如何獲得線程池中正在執行的線程數

java中線程池的監控可以檢測到正在執行的線程數。
通過線程池提供的參數進行監控。線程池裡有一些屬性在監控線程池的時候可以使用
taskCount:線程池需要執行的任務數量。
completedTaskCount:線程池在運行過程中已完成的任務數量。小於或等於taskCount。
largestPoolSize:線程池曾經創建過的最大線程數量。通過這個數據可以知道線程池是否滿過。如等於線程池的最大大小,則表示線程池曾經滿了。
getPoolSize:線程池的線程數量。如果線程池不銷毀的話,池裡的線程不會自動銷毀,所以這個大小隻增不+
getActiveCount:獲取活動的線程數。
通過擴展線程池進行監控。通過繼承線程池並重寫線程池的beforeExecute,afterExecute和terminated方法,我們可以在任務執行前,執行後和線程池關閉前干一些事情。如監控任務的平均執行時間,最大執行時間和最小執行時間等。這幾個方法在線程池裡是空方法。如:
protected
void
beforeExecute(Thread
t,
Runnable
r)
{
}

㈥ Java線程狀態中BLOCKED和WAITING有什麼區別

一、線程5種狀態新建狀態(New) 新創建了一個線程對象。就緒狀態(Runnable) 線程對象創建後,其他線程調用了該對象的start()方法。該狀態的線程位於可運行線程池中,變得可運行,等待獲取CPU的使用權。運行狀態(Running) 就緒狀態的線程獲取了CPU,執行程序代碼。阻塞狀態(Blocked) 阻塞狀態是線程因為某種原因放棄CPU使用權,暫時停止運行。直到線程進入就緒狀態,才有機會轉到運行狀態。阻塞的情況分三種:等待阻塞:運行的線程執行wait()方法,JVM會把該線程放入等待池中。同步阻塞:運行的線程在獲取對象的同步鎖時,若該同步鎖被別的線程佔用,則JVM會把該線程放入鎖池中。其他阻塞:運行的線程執行sleep()或join()方法,或者發出了I/O請求時,JVM會把該線程置為阻塞狀態。當sleep()狀態超時、join()等待線程終止或者超時、或者I/O處理完畢時,線程重新轉入就緒狀態。死亡狀態(Dead):線程執行完了或者因異常退出了run()方法,該線程結束生命周期。二、Jstack中常見的線程狀態應用程序啟動後,我們對系統運行狀況的觀測大部分情況下是通過運行日誌。但是若某一天發現,日誌中記錄的行為與預想的不一致,此時需要進一步的系統監控該怎麼辦,Jstack是常用的排查工具,它能輸出在某一個時間,Java進程中所有線程的狀態,很多時候這些狀態信息能給我們的排查工作帶來有用的線索。
Jstack的輸出中,Java線程狀態主要是以下幾種:RUNNABLE 線程運行中或I/O等待
BLOCKED 線程在等待monitor鎖(synchronized關鍵字)
TIMED_WAITING 線程在等待喚醒,但設置了時限WAITING 線程在無限等待喚醒1) 讓線程一直處於RUNNABLE
<pre t="code" l="java">public static void runnable() {
long i = 0;
while (true) {
i++;
}
}2) 讓線程一直處於BLOCKED
<pre t="code" l="java">public static void blocked() {
final Object lock = new Object();
new Thread() {
public void run() {
synchronized (lock) {
System.out.println("i got lock, but don't release");
try {
Thread.sleep(1000L * 1000);
} catch (InterruptedException e) {
}
}
}
}.start();

try { Thread.sleep(100); } catch (InterruptedException e) {}

synchronized (lock) {
try {
Thread.sleep(30 * 1000);
} catch (InterruptedException e) {
}
}
}主線程sleep,先讓另外一個線程拿到lock,並長期持有lock(sleep會持有鎖,wait不會)。此時主線程會BLOCK住等待lock被釋放,此時jstack的輸出可以看到main線程狀態是BLOCKED。這里要注意的是只有synchronized這種方式的鎖(monitor鎖)才會讓線程出現BLOCKED狀態,等待ReentrantLock則不會。
3) 讓線程處於TIMED_WAITING狀態<pre t="code" l="java">public static void timedWaiting() {
final Object lock = new Object();
synchronized (lock) {
try {
lock.wait(30 * 1000);
} catch (InterruptedException e) {
}
}
}<pre t="code" l="java">
4)讓線程處於WAITING狀態<pre t="code" l="java">public static void waiting() {
final Object lock = new Object();
synchronized (lock) {
try {
lock.wait();
} catch (InterruptedException e) {
}
}
}無超時的等待,必須等待lock.notify()或lock.notifyAll()或接收到interrupt信號才能退出等待狀態。
<pre t="code" l="java">

<pre t="code" l="java">

㈦ java線程的幾種狀態

總結了6種狀態,希望對你所有幫助:

1、NEW狀態是指線程剛創建, 尚未啟動

2、RUNNABLE狀態是線程正在正常運行中, 當然可能會有某種耗時計算/IO等待的操作/CPU時間片切換等, 這個狀態下發生的等待一般是其他系統資源, 而不是鎖, Sleep等

3、BLOCKED這個狀態下, 是在多個線程有同步操作的場景, 比如正在等待另一個線程的synchronized 塊的執行釋放, 或者可重入的 synchronized塊里別人調用wait() 方法, 也就是這里是線程在等待進入臨界區

4、WAITING這個狀態下是指線程擁有了某個鎖之後, 調用了他的wait方法, 等待其他線程/鎖擁有者調用 notify / notifyAll 一遍該線程可以繼續下一步操作, 這里要區分 BLOCKED 和 WATING 的區別, 一個是在臨界點外面等待進入, 一個是在臨界點裡面wait等待別人notify, 線程調用了join方法 join了另外的線程的時候, 也會進入WAITING狀態, 等待被他join的線程執行結束

5、TIMED_WAITING這個狀態就是有限的(時間限制)的WAITING, 一般出現在調用wait(long), join(long)等情況下, 另外一個線程sleep後, 也會進入TIMED_WAITING狀態

6、TERMINATED這個狀態下表示 該線程的run方法已經執行完畢了, 基本上就等於死亡了(當時如果線程被持久持有, 可能不會被回收)

㈧ java中如何監聽一個線程的結束

你可以把thread的執行的代碼 全部TRY CATCH起來啊 如果報異常了 就發送請求給SERVLET啊 如果正常結束完成 你也可以坐響應的處理啊 。
Runtime.getRuntime().addShutdownHook(Thread);當程序出現問題時會先啟動Thread這個線程,
幫你解決記錄或或者其他線程的關閉。

閱讀全文

與java監控線程狀態相關的資料

熱點內容
拍賣程序員 瀏覽:101
電腦的圖片放在哪個文件夾 瀏覽:274
unsignedintjava 瀏覽:216
編譯器下載地址 瀏覽:42
什麼是面對對象編程 瀏覽:708
b站伺服器什麼時候恢復 瀏覽:721
6p相當於安卓機什麼水準 瀏覽:498
能否給隱藏相冊加密 瀏覽:596
糖心app改什麼名 瀏覽:823
戰地1控伺服器如何部署 瀏覽:394
xp還原系統輸入命令 瀏覽:323
mysql命令行版本 瀏覽:305
如何進入itunes找文件夾 瀏覽:834
CAD中重復命令使用 瀏覽:479
心智pdf 瀏覽:476
網站電台直播間源碼 瀏覽:854
文件夾14c和18c的區別 瀏覽:36
android隱式調用 瀏覽:668
plc的編程指令邊沿繼電器 瀏覽:724
voc文件夾 瀏覽:866