導航:首頁 > 編程語言 > java獲取所有線程

java獲取所有線程

發布時間:2023-08-23 21:47:52

java 線程總數如何查看

調用java.lang.Thread中的靜態方法:

getAllStackTraces() 返回所有活動線程的堆棧跟蹤的一個映射。

Ⅱ 多線程的Java

Java對多線程的支持是非常強大的,他屏蔽掉了許多的技術細節,讓我們可以輕松的開發多線程的應用程序。
Java裡面實現多線程,有2個方法
繼承 Thread類 classMyThreadextendsThread{publicvoidrun(){//這里寫上線程的內容}publicstaticvoidmain(String[]args){//使用這個方法啟動一個線程(newMyThread()).start();}}實現 Runnable介面 {publicvoidrun(){//這里寫上線程的內容}publicstaticvoidmain(String[]args){//使用這個方法啟動一個線程(newThread(newMyThread())).start();}}一般鼓勵使用第二種方法,因為Java裡面只允許單一繼承,但允許實現多個介面。第二個方法更加靈活。
C++ 11
ISO C++ 11 標准在STL中提供了std::thread類,因此多線程變得非常容易。 #include<thread>usingnamespacestd;voidthreadFunc(){//這里寫上線程的內容}intmain(){threadt(threadFunc);//啟動線程t.join();//等待線程運行完畢return0;}一個採用了多線程技術的應用程序可以更好地利用系統資源。其主要優勢在於充分利用了CPU的空閑時間片,可以用盡可能少的時間來對用戶的要求做出響應,使得進程的整體運行效率得到較大提高,同時增強了應用程序的靈活性。更為重要的是,由於同一進程的所有線程是共享同一內存,所以不需要特殊的數據傳送機制,不需要建立共享存儲區或共享文件,從而使得不同任務之間的協調操作與運行、數據的交互、資源的分配等問題更加易於解決。
線程同步
在多線程應用中,考慮不同線程之間的數據同步和防止死鎖。當兩個或多個線程之間同時等待對方釋放資源的時候就會形成線程之間的死鎖。為了防止死鎖的發生,需要通過同步來實現線程安全。在Visual Basic中提供了三種方法來完成線程的同步。在Java中可用synchronized關鍵字。
代碼域同步
使用Monitor類可以同步靜態/實例化的方法的全部代碼或者部分代碼段。
手工同步
可以使用不同的同步類(諸如WaitHandle, Mutex, ReaderWriterLock, ManualResetEvent, AutoResetEvent 和Interlocked等)創建自己的同步機制。這種同步方式要求你自己手動的為不同的域和方法同步,這種同步方式也可以用於進程間的同步和解除由於對共享資源的等待而造成的死鎖。
上下文同步
使用SynchronizationAttribute為ContextBoundObject對象創建簡單的,自動的同步。這種同步方式僅用於實例化的方法和域的同步。所有在同一個上下文域的對象共享同一個鎖。
雖然多線程能給大家帶來好處,但是也有不少問題需要解決。例如,對於像磁碟驅動器這樣獨占性系統資源,由於線程可以執行進程的任何代碼段,且線程的運行是由系統調度自動完成的,具有一定的不確定性,因此就有可能出現兩個線程同時對磁碟驅動器進行操作,從而出現操作錯誤;又例如,對於銀行系統的計算機來說,可能使用一個線程來更新其用戶資料庫,而用另外一個線程來讀取資料庫以響應儲戶的需要,極有可能讀資料庫的線程讀取的是未完全更新的資料庫,因為可能在讀的時候只有一部分數據被更新過。使隸屬於同一進程的各線程協調一致地工作稱為線程的同步。下面我們只介紹最常用的四種線程同步方式:
臨界區(critical section)
事件(event)
互斥量(mutex)
信號量(semaphore)
通過這些類,可以比較容易地做到線程同步。
HT定義
超線程(HT)是英特爾所研發的一種技術,於2002年發布。超線程的英文是HT技術,全名為Hyper-Threading,中文又名超線程。超線程技術原先只應用於Xeon處理器中,當時稱為Super-Threading。之後陸續應用在Pentium 4中,將技術主流化。早期代號為Jackson。
特點
通過此技術,英特爾成為第一間公司實現在一個實體處理器中,提供兩個邏輯線程。之後的Pentium D縱使不支援超線程技術,但就集成了兩個實體核心,所以仍會見到兩個邏輯線程。超線程的未來發展,是提升處理器的邏輯線程,英特爾有計劃將8核心的處理器,加以配合超線程技術,使之成為16個邏輯線程的產品。
英特爾表示,超線程技術讓(P4)處理器增加5%的裸晶面積,就可以換來15%~30%的效能提升。但實際上,在某些程式或未對多執行緒編譯的程式而言,超線程反而會降低效能。除此之外,超線程技術亦要操作系統的配合,普通支援多處理器技術的系統亦未必能充分發揮該技術。例如Windows 2000,英特爾並不鼓勵使用者在此系統中利用超線程。原先不支援多核心的Windows XPHome Edition卻支援超線程技術。
AMDBulldozer「推土機」
據相關消息透露,在HotChips會議上,AMD宣布下一代代號為Bulldozer「推土機」的處理器架構將採用單核多線程技術(multi-threadingtechnology),類似於Intel著名的超線程技術.
AMD沒有透露有關其多線程能力和更多的細節,只說推土機處理器將在2011年推出,支持單核多線程技術.不過,AMD的做法和Intel的 HT是不同的,更類似於Sun的同步多線程技術(SimultaneousMulti-Threading),由1個物理核心擴展到4個線程.「推土機擴展出的單核心多線程技術和Intel的超線程採用的是不同方式.」AMD的代表PatConway也證實了這一點. 有趣的是,早些時候AMD還表示暫不考慮SMT或其他多線程技術,並將它應用在當下的處理器中.然而,AMD也認同步多線程是未來處理器產品大幅提升性能的必要特徵.
推土機是AMD下一代微架構的處理器,事實上,它將是AMD自2003年後第一次對處理器架構進行重大改變.新一代的處理器將提供遠高於現代產品的高性能,同時也加入SSE5指令集.
首款推土機系列桌面處理器代號為Orochi,將會擁有超過4個以上的處理器核心,8M以上的緩存並支持DDR3內存,基於32nm工藝.伺服器版處理器代號為Valencia和Interlagos,這兩款處理器將會擁有6、8以及12個處理器核心.
AMD至今從未採用過同步多線程(SMT)也就是Intel所稱的超線程技術。雖然這樣的技術在當年的P4時代顯得並無實際用途,但到了2015年為止,越發普及的多線程環境讓超線程重新煥發了青春。
發展前景
截止到2014年,以應用環境來看,超線程技術可以讓一些特定應用程序顯著提速達10到15%。除了Intel的在Nehalem、Atom等中引入的超線程,無論IBM的Power系列,Sun的T1/T2/Rock系列等處理器架構都應用了類似的SMT同步多線程技術,用少量的晶體管帶來大幅度的多線程性能提升。
一位AMD工程師日前向媒體坦誠,不支持單核多線程技術讓Opteron處理器看起來性能比不上Intel的低端Xeon。據稱,AMD內部高層已經承認,沒有早早引入此類技術是一項技術選擇上的失誤。
不過,AMD副總裁兼伺服器工作站業務總經理Patrick Patla接受采訪時,並沒有明確透露單核多線程技術的未來,而是繼續重申已經公布的Opteron路線圖:「如果你看一下我們路線圖以及我們在多線程處理器市場的表現就會知道,我們相信每條線程都擁有完整的核心是目前的最佳選擇。2010年,我們就會推出12核處理器,2011年16核。我們相信未來幾年內我們就能夠完善支持48或64線程環境,讓我們來看看2012到2013年會帶來些什麼吧。」
既然2011年才是16核,那麼2012到2013直接跳躍到48甚至64核似乎並不是那麼正常。另外,Patrick Patla前面句句都在講「核」,而到了後面又變成了「線程」,似乎就在暗示到時AMD可能會採納單核多線程技術。

Ⅲ java 根據線程名字查詢一個線程,能實現嗎

根據線程名稱找到線程,在java中是可以實現的,實現步驟是:
1、首先獲取Java VM中當前運行的所有線程
以下代碼是用數組返回Java VM中當前運行的所有線程


publicstaticThread[]findAllThreads()
{
ThreadGroupgroup=Thread.currentThread().getThreadGroup();
ThreadGrouptopGroup=group;

/*遍歷線程組樹,獲取根線程組*/
while(group!=null)
{
topGroup=group;
group=group.getParent();
}
/*激活的線程數加倍*/
intestimatedSize=topGroup.activeCount()*2;
Thread[]slackList=newThread[estimatedSize];

/*獲取根線程組的所有線程*/
intactualSize=topGroup.enumerate(slackList);
/*intoalistthatistheexactsize*/
Thread[]list=newThread[actualSize];
System.array(slackList,0,list,0,actualSize);
return(list);
}

2、遍歷線程,比對名稱,找到需要尋找的線程
以下代碼可得到線程的名稱

Stringname=thread.getName();
閱讀全文

與java獲取所有線程相關的資料

熱點內容
單片機介面技術及應用 瀏覽:749
linux下執行腳本文件 瀏覽:125
撥號加密保護 瀏覽:435
b站彈幕加密 瀏覽:599
交友盲盒源碼破解 瀏覽:248
單片機100位百位符號 瀏覽:684
用友通加密狗壞了 瀏覽:548
如何在伺服器上配置外網網址 瀏覽:840
阿里雲伺服器的硬體在哪裡 瀏覽:52
python自動注冊谷歌 瀏覽:329
phpini驗證碼 瀏覽:824
解壓後的文件怎麼驅動 瀏覽:327
老闆要程序員加班 瀏覽:415
泰爾pdf 瀏覽:312
視頻轉碼壓縮哪款軟體好 瀏覽:648
盯盯拍記錄儀下載什麼app 瀏覽:437
新東方新概念英語pdf 瀏覽:697
python中如何創建菜單欄 瀏覽:509
中石化app那個叫什麼名 瀏覽:708
借貸寶合集解壓密碼 瀏覽:640