线程信息的获取和设置
一、thread類有一些保存信息的屬性,這些屬性可以用來標(biāo)識線程,顯示線程的狀態(tài)或者控制線程的優(yōu)先級。
1.ID:保存了線程的唯一標(biāo)識符
2.Name:保存了線程的名稱
3.Priority:保存了線程對象的優(yōu)先級。線程的優(yōu)先級是從1到10,其中1是最低優(yōu)先級,10是最高優(yōu)先級。
4.Status:保存了線程的狀態(tài)。線程的狀態(tài)有6種:new、runnable、blocked、waiting、time waiting或者terminated。
?
二、線程的中斷
1.Thread類中的isInterrupted()方法
2.Thread類的靜態(tài)方法interrupted()方法
isInterrupted()方法和interrupted()方法的區(qū)別是:isInterrupted()方法不能改變interrupted屬性的值,但是interrupted()方法能設(shè)置interrupted屬性為false。因為interrupted()方法是一個靜態(tài)方法,更推薦使用isInterrupted()方法。
三、線程的休眠
線程休眠可以調(diào)用Thread類的靜態(tài)方法sleep(long millis),該方法參數(shù)單位為毫秒。
另外一種方式是通過TimeUnit枚舉類來使用Thread類的sleep()方法,但是它接收的參數(shù)單位是秒,最終被轉(zhuǎn)為毫秒。
四、等待線程的終止
在一些情況下,我們必須等待線程終止后,在執(zhí)行其他任務(wù),這時候我們使用Thread類的join()方法。
當(dāng)一個線程對象的join()方法被調(diào)用時,調(diào)用它的線程將被掛起,直到這個線程對象完成它的任務(wù)。
java提供了另外兩種形式的join()方法:參數(shù)單位毫秒和納秒
join(long milliseconds)
join(long milliseconds,long nanos)
五、守護(hù)線程
守護(hù)線程的優(yōu)先級很低,通常來說,當(dāng)同一個應(yīng)用程序里沒有其他的線程運(yùn)行時候,守護(hù)線程才運(yùn)行。當(dāng)守護(hù)線程是程序中唯一運(yùn)行的線程時,守護(hù)線程執(zhí)行結(jié)束后,JVM也就結(jié)束了這個程序。
Daemon的作用是為其他線程的運(yùn)行提供便利服務(wù),守護(hù)線程最典型的應(yīng)用就是 GC (垃圾回收器),它就是一個很稱職的守護(hù)者。
User和Daemon兩者幾乎沒有區(qū)別,唯一的不同之處就在于虛擬機(jī)的離開:如果 User Thread已經(jīng)全部退出運(yùn)行了,只剩下Daemon Thread存在了,虛擬機(jī)也就退出了。 因為沒有了被守護(hù)者,Daemon也就沒有工作可做了,也就沒有繼續(xù)運(yùn)行程序的必要了。
值得一提的是,守護(hù)線程并非只有虛擬機(jī)內(nèi)部提供,用戶在編寫程序時也可以自己設(shè)置守護(hù)線程。下面的方法就是用來設(shè)置守護(hù)線程的。
Thread daemonTread = new Thread(); ?
// 設(shè)定 daemonThread 為 守護(hù)線程,default false(非守護(hù)線程) ?
daemonThread.setDaemon(true); ?
// 驗證當(dāng)前線程是否為守護(hù)線程,返回 true 則為守護(hù)線程 ?
daemonThread.isDaemon();? ?
setDaemon()方法只能在start()方法被調(diào)用之前設(shè)置。一旦線程開始運(yùn)行,將不能再修改守護(hù)狀態(tài)。
isDaemon()方法被用來檢查一個線程是不是守護(hù)線程,返回值為true表示這個線程是守護(hù)線程,false表示這個線程是用戶線程。
六、線程局部變量的使用
ThreadLocal為每個使用該變量的線程分配一個獨(dú)立的變量副本。所以每一個線程都可以獨(dú)立地改變自己的副本,而不會影響其他線程所對應(yīng)的副本。
1、ThreadLocal不是線程,是線程的一個變量,你可以先簡單理解為線程類的屬性變量。
2、ThreadLocal在類中通常定義為靜態(tài)變量。
3、每個線程有自己的一個ThreadLocal,它是變量的一個“拷貝”,修改它不影響其他線程。
ThreadLocal適用于資源共享但不需要維護(hù)狀態(tài)的情況,也就是一個線程對資源的修改,不影響另一個線程的運(yùn)行;這種設(shè)計是‘空間換時間’,synchronized順序執(zhí)行是‘時間換取空間’。
四個核心方法說明如下:
T get():返回此線程局部變量的當(dāng)前線程副本中的值。
protected T initialValue():返回此線程局部變量的當(dāng)前線程的“初始值”。
void remove():移除此線程局部變量當(dāng)前線程的值。
void set(T value):將此線程局部變量的當(dāng)前線程副本中的值設(shè)置為指定值。
七、線程的分組
Java Concurrent API中提供了對線程進(jìn)行分組管理的ThreadGroup,使得我們可以將多個線程看作一個單元,對這些線程執(zhí)行操作,如中斷一組線程等。
ThreadGroup類有很多方法,它的API文檔提供了所有的方法的完整解釋。
八、線程工廠類
工廠模式是面向?qū)ο缶幊讨凶畛J褂玫哪J街弧K且粋€創(chuàng)建者模式,使用一個類為其他的一個或者多個類創(chuàng)建對象。當(dāng)我們要為這些類創(chuàng)建對象時,不需再使用new構(gòu)造器,而使用工廠類。
使用工廠類,可以將對象的創(chuàng)建集中化,這樣做有以下的好處:
1、更容易修改類,或者改變創(chuàng)建對象的方式;
2、更容易為有限資源限制創(chuàng)建對象的數(shù)目。例如,我們可以限制一個類型的對象不多于n個。
3、更容易為創(chuàng)建的對象生成統(tǒng)計數(shù)據(jù)。
Java提供了ThreadFactory接口,這個接口實現(xiàn)了線程對象工廠。Java并發(fā)API的高級工具類也使用了線程工廠創(chuàng)建線程。
?
轉(zhuǎn)載于:https://www.cnblogs.com/web424/p/7874202.html
總結(jié)
以上是生活随笔為你收集整理的线程信息的获取和设置的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cityofstars歌词是口语化的吗
- 下一篇: 谁有初一到初三的人教版英语同步MP3资料