① java怎麼得到當前線程的啟動線程id
publicclass線程id
{
publicstaticvoidmain(String[]args)
{
System.out.println(" ==========多線程怎麼查看當前線程id========== ");
init();
}//初始化!
privatestaticvoidinit()
{
for(inti=0;i<2;i++)
{
newThread(newTestRunnable()).start();
}
}
}
{
//簡單測試直接用了靜態,偷懶了!
privatestaticinti=10;
publicvoidrun()
{
show();
}
synchronizedvoidshow()
{
while(i>=1)
System.out.println("當前執行的線程Id是:"+Thread.currentThread().getName()+"---->"+i--+" ");
}
}
② java 多線程怎麼查看當前線程id
publicclass線程id
{
publicstaticvoidmain(String[]args)
{
System.out.println(" ==========多線程怎麼查看當前線程id========== ");
init();
}//初始化!
privatestaticvoidinit()
{
for(inti=0;i<2;i++)
{
newThread(newTestRunnable()).start();
}
}
}
{
//簡單測試直接用了靜態,偷懶了!
privatestaticinti=10;
publicvoidrun()
{
show();
}
synchronizedvoidshow()
{
while(i>=1)
System.out.println("當前執行的線程Id是:"+Thread.currentThread().getName()+"---->"+i--+" ");
}
}
③ 在java中可否使用線程名或其ID號獲取其引用
其實你問的應該是為什麼直接寫Thread。
先看下api上如此寫:
currentThread
public static Thread currentThread()
返回對當前正在執行的線程對象的引用。
可見這時個靜態方法,你這么理解更好點:你在哪個線程調用的我(currentThread),我就給你返回哪個線程。跟父子其實沒有關系的,你在父中調用我,我就返回你說的父線程,你在子調用我就返回子線程,你在main主線程調用,我就返回主線程。也就是說你cpu正在運行哪個線程。如圖:
④ Java線程getID()的困惑
你用getName方法就是從0開始了,一個程序中還有其他線程在運行,例如執行main方法的主線程,垃圾回收機制啥的,所以你創建的這些線程不會是從0開始的。
⑤ Java如何獲取正在運行的線程的Id
使用:Thread.currentThread().getName() 就可以了
比如會輸出:pool-1-thread-7
⑥ JAVA根據線程ID,如何根據這個ID 停止一個線程
應該能通過ID拿到那個線程對象的吧。然後再通過改變循環條件就能停止線程。只要runnable里的循環停了線程也就停了。
⑦ 這段java 多線程代碼為什麼id是1的線程一直在等待
從代碼來看,每個線程的o都不是同一個。1線程的o.wait()後,只執行了2線程的o.notifyAll()。所以1線程會一直處於等待中。如果要達到你的要求,修改構造函數,去掉o = new Object();這句。因為這句會在每次初始化一個新線程時,改變o的指向。
⑧ java中可以根據線程名而不是id獲得想要的線程嗎
可以的。
但是要先獲取線程組,然後遍歷線程組樹,獲取根線程組,然後再遍歷所有線程,並分別判斷所有的線程的id或者name,也就是說你可以通過id或者name來獲取一個線程。
⑨ java 中thread 獲取線程id為什麼默認從10開始
從源碼中分析線程的id是從0開始的
⑩ Java 中怎麼獲取一份線程 mp 文件
當伺服器掛起,崩潰或者性能底下時,就需要抓取伺服器的線程堆棧(Thread Dump)用於後續的分析.
Thread mp提供了當前活動的線程的快照.它提供了JVM中所有Java線程的棧跟蹤信息
有很多方式可用於獲取Thread Dump,一些是操作系統特定的命令.
Windows:
1. 轉向伺服器的標准輸出窗口並按下Control + Break組合鍵,之後需要將線程堆棧復制到文件中
UNIX/ Linux
首先查找到伺服器的進程號(process id),然後獲取堆棧.
1. ps –ef| grep java
2. kill -3 <pid>
注意一定要謹慎,一步不慎就可能讓伺服器進程被殺死!
JVM自帶的工具獲取線程堆棧:
JDK自帶命令行工具獲取PID並做ThreadDump:
1. jps
2.jstack <pid>
使用JVisualVM:
Threads標簽頁 →ThreadDump按鈕
WebLogic自帶的獲取thread mp的工具:
1. webLogic.Admin工具
a.打開命令提示符,通過運行<DOMAIN_HOME>/bin/setDomain.env設置相關類路徑
b.執行下面的命令
java weblogic.Admin -url t3://localhost:7001 -username weblogic -password weblogic1 THREAD_DUMP
注意: Thread Dump會列印到標准輸出,如nohup日誌或者進程窗口.
2.使用 Admin Console
a.登錄Admin Console ,點擊對應的伺服器
b.點擊ServeràMonitoringàThreads
c.點擊: Dump Thread Stack按鈕
3.使用WLST (WebLogic Scripting Tool)
connect(『weblogic』,'weblogic1』,』t3://localhost:7001』)
cd(『Servers』)
cd(『AdminServer』)
threadDump()
disconnect()
exit()
注意:線程堆棧將會保存在運行wlst的當前目錄下.
4.使用utils.ThreadDumper
用法:
C:eawlserver_10.3serverlib>java -cp weblogic.jar utils.ThreadDumper
Broadcast Thread mps disabled: must specify weblogic.debug.mpThreadAddr and
weblogic.debug.mpThreadPort
Exception in thread "main" java.lang.IllegalArgumentException: Port out of range
:-1
at java.net.DatagramPacket.setPort(Unknown Source)
at java.net.DatagramPacket.<init>(Unknown Source)
at java.net.DatagramPacket.<init>(Unknown Source)
at utils.ThreadDumper.sendDumpMsg(ThreadDumper.java:124)
at utils.ThreadDumper.main(ThreadDumper.java:145)
5.如果伺服器是作為Windows服務的方式運行,請運行下列命令:
WL_HOMEineasvc -mp -svcname:service-name
$JAVA_