線程信息的獲取和設置

1、thread類有一些保存信息的屬性,這些屬性能夠用來標識線程,顯示線程的狀態或者控制線程的優先級。java

1.ID:保存了線程的惟一標識符編程

2.Name:保存了線程的名稱併發

3.Priority:保存了線程對象的優先級。線程的優先級是從1到10,其中1是最低優先級,10是最高優先級。工具

4.Status:保存了線程的狀態。線程的狀態有6種:new、runnable、blocked、waiting、time waiting或者terminated。線程

 

2、線程的中斷設計

1.Thread類中的isInterrupted()方法對象

2.Thread類的靜態方法interrupted()方法接口

isInterrupted()方法和interrupted()方法的區別是:isInterrupted()方法不能改變interrupted屬性的值,可是interrupted()方法能設置interrupted屬性爲false。由於interrupted()方法是一個靜態方法,更推薦使用isInterrupted()方法。資源

3、線程的休眠rem

線程休眠能夠調用Thread類的靜態方法sleep(long millis),該方法參數單位爲毫秒。

另一種方式是經過TimeUnit枚舉類來使用Thread類的sleep()方法,可是它接收的參數單位是秒,最終被轉爲毫秒。

4、等待線程的終止

在一些狀況下,咱們必須等待線程終止後,在執行其餘任務,這時候咱們使用Thread類的join()方法。

當一個線程對象的join()方法被調用時,調用它的線程將被掛起,直到這個線程對象完成它的任務。

java提供了另外兩種形式的join()方法:參數單位毫秒和納秒

join(long milliseconds)

join(long milliseconds,long nanos)

5、守護線程

守護線程的優先級很低,一般來講,當同一個應用程序裏沒有其餘的線程運行時候,守護線程才運行。當守護線程是程序中惟一運行的線程時,守護線程執行結束後,JVM也就結束了這個程序。

Daemon的做用是爲其餘線程的運行提供便利服務,守護線程最典型的應用就是 GC (垃圾回收器),它就是一個很稱職的守護者。
User和Daemon二者幾乎沒有區別,惟一的不一樣之處就在於虛擬機的離開:若是 User Thread已經所有退出運行了,只剩下Daemon Thread存在了,虛擬機也就退出了。 由於沒有了被守護者,Daemon也就沒有工做可作了,也就沒有繼續運行程序的必要了。
值得一提的是,守護線程並不是只有虛擬機內部提供,用戶在編寫程序時也能夠本身設置守護線程。下面的方法就是用來設置守護線程的。

Thread daemonTread = new Thread();  
// 設定 daemonThread 爲 守護線程,default false(非守護線程)  
daemonThread.setDaemon(true);  
// 驗證當前線程是否爲守護線程,返回 true 則爲守護線程  
daemonThread.isDaemon();   
setDaemon()方法只能在start()方法被調用以前設置。一旦線程開始運行,將不能再修改守護狀態。
isDaemon()方法被用來檢查一個線程是否是守護線程,返回值爲true表示這個線程是守護線程,false表示這個線程是用戶線程。

6、線程局部變量的使用

ThreadLocal爲每一個使用該變量的線程分配一個獨立的變量副本。因此每個線程均可以獨立地改變本身的副本,而不會影響其餘線程所對應的副本。
一、ThreadLocal不是線程,是線程的一個變量,你能夠先簡單理解爲線程類的屬性變量。
二、ThreadLocal在類中一般定義爲靜態變量。
三、每一個線程有本身的一個ThreadLocal,它是變量的一個「拷貝」,修改它不影響其餘線程。
ThreadLocal適用於資源共享但不須要維護狀態的狀況,也就是一個線程對資源的修改,不影響另外一個線程的運行;這種設計是‘空間換時間’,synchronized順序執行是‘時間換取空間’。
四個核心方法說明以下:
T get():返回此線程局部變量的當前線程副本中的值。
protected T initialValue():返回此線程局部變量的當前線程的「初始值」。
void remove():移除此線程局部變量當前線程的值。
void set(T value):將此線程局部變量的當前線程副本中的值設置爲指定值。

7、線程的分組

Java Concurrent API中提供了對線程進行分組管理的ThreadGroup,使得咱們能夠將多個線程看做一個單元,對這些線程執行操做,如中斷一組線程等。

ThreadGroup類有不少方法,它的API文檔提供了全部的方法的完整解釋。

8、線程工廠類

工廠模式是面向對象編程中最常使用的模式之一。它是一個建立者模式,使用一個類爲其餘的一個或者多個類建立對象。當咱們要爲這些類建立對象時,不需再使用new構造器,而使用工廠類。使用工廠類,能夠將對象的建立集中化,這樣作有如下的好處:一、更容易修改類,或者改變建立對象的方式;二、更容易爲有限資源限制建立對象的數目。例如,咱們能夠限制一個類型的對象很少於n個。三、更容易爲建立的對象生成統計數據。Java提供了ThreadFactory接口,這個接口實現了線程對象工廠。Java併發API的高級工具類也使用了線程工廠建立線程。

相關文章
相關標籤/搜索