摘要:實現接口直接被繼承的子類是程序中的執行線程,虛擬機允許應用程序同時運行多個執行線程。如果要恢復目標線程的線程試圖在調用之前鎖定此監視器,則會導致死鎖。線程可以擁有的最大優先級。
Class Thread
java.lang.Object java.lang.Thread
實現接口:Runnable
直接被繼承的子類:ForkJoinWorkerThread
public class Thread extends Object implements Runnable
thread是程序中的執行線程,Java虛擬機允許應用程序同時運行多個執行線程。
每個線程都有一個優先級,優先級較高的線程優先于優先級較低的線程執行,每個線程都可能被標記為一個守護線程。當在某個線程中運行的代碼創建一個新的線程對象時,新線程的優先級初始設置為創建它的線程的優先級,并且當且僅當創建它的線程是一個守護線程時,它是一個守護線程。
當Java虛擬機啟動時,通常只有一個非守護線程(通常稱為某些指定類的main方法),Java虛擬機繼續執行線程,直到發生以下任何一種情況:
類的exit方法在運行時被調用,并且安全管理器允許exit操作發生。
所有非守護線程都已死亡,要么從調用run方法那里返回,要么拋出一個傳播到run方法之外的異常。
有兩種方法可以創建一個新的執行線程,一種方法是將類聲明為Thread的子類,這個子類應該重寫類Thread的run方法,然后可以分配并啟動子類的一個實例。例如,一個計算大于指定值的素數的線程可以這樣寫:
class PrimeThread extends Thread { PrimeThread(long minPrime) { this.minPrime = minPrime; } public void run() { // compute primes larger than minPrime . . . } }
下面的代碼將創建一個線程并啟動運行:
PrimeThread p = new PrimeThread(143); p.start();
另一種創建線程的方法是聲明實現Runnable接口的類,該類實現run方法,然后可以分配類的一個實例,在創建線程時作為參數傳遞,并啟動。另一種風格中的相同示例如下:
class PrimeRun implements Runnable { long minPrime; PrimeRun(long minPrime) { this.minPrime = minPrime; } public void run() { // compute primes larger than minPrime . . . } }
下面的代碼將創建一個線程并啟動運行:
PrimeRun p = new PrimeRun(143); new Thread(p).start();
每個線程都有一個用于標識的名稱,多個線程可能具有相同的名稱,如果在創建線程時沒有指定名稱,將為它生成一個新名稱。
除非另外注明,將null參數傳遞給該類的構造函數或方法將導致拋出NullPointerException。
自:JDK1.0,相關類和方法:Runnable,Runtime.exit(int),run(),stop()
內嵌類匯總static class Thread.State
線程的狀態
static interface Thread.UncaughtExceptionHandler
當線程因未捕獲異常而突然終止時調用的處理程序的接口
字段匯總static int MAX_PRIORITY
線程可以擁有的最大優先級
static int MIN_PRIORITY
線程可以擁有的最小優先級
static int NORM_PRIORITY
分配給線程的默認優先級
構造函數匯總Thread()
分配一個新的線程對象
Thread(Runnable target)
分配一個新的線程對象,使其具有target作為其運行對象
Thread(Runnable target, String name)
分配一個新的線程對象,使其具有target作為其運行對象,并具有指定的name作為其名稱
Thread(String name)
分配一個新的線程對象,具有指定的name作為其名稱
Thread(ThreadGroup group, Runnable target)
分配一個新的線程對象,使其具有target作為其運行對象,并且屬于group引用的線程組
Thread(ThreadGroup group, Runnable target, String name)
分配一個新的線程對象,使其具有target作為其運行對象,具有指定的name作為其名稱,并且屬于group引用的線程組
Thread(ThreadGroup group, Runnable target, String name, long stackSize)
分配一個新的線程對象,使其具有target作為其運行對象,具有指定的name作為其名稱,并且屬于由group引用的線程組,并具有指定的堆棧大小。
Thread(ThreadGroup group, String name)
分配一個新的線程對象,具有指定的name作為其名稱,并且屬于由group引用的線程組
方法匯總static int activeCount()
返回當前線程組及其子組中活動線程的數量的估算
void checkAccess()
確定當前運行的線程是否具有修改該線程的權限
protected Object clone()
一個線程被沒有意義的克隆將拋出CloneNotSupportedException
int countStackFrames()
已廢棄。這個調用的定義依賴于suspend(),它已被廢棄,此外,這個調用的結果從來沒有明確的定義
static Thread currentThread()
返回對當前執行的線程對象的引用
void destroy()
已廢棄。此方法最初設計為在不進行任何清理的情況下銷毀此線程,它所持有的任何監視器都將保持鎖定狀態,然而,該方法從未實現,如果要實現的話,它很可能會像suspend()那樣出現死鎖。如果目標線程在被銷毀時持有保護關鍵系統資源的鎖,則沒有線程可以再次訪問該資源,如果另一個線程試圖鎖定該資源,則會導致死鎖。這種死鎖通常表現為“凍結”進程。
static void dumpStack()
將當前線程的堆棧跟蹤打印到標準錯誤流
static int enumerate(Thread[] tarray)
將當前線程組及其子組中的每個活動線程復制到指定的數組中
static Map
返回所有活動線程的堆棧跟蹤map
ClassLoader getContextClassLoader()
返回該線程的上下文類加載器
static Thread.UncaughtExceptionHandler getDefaultUncaughtExceptionHandler()
返回由于未捕獲異常而突然終止的線程時調用的默認處理程序
long getId()
返回該線程的標識符
String getName()
返回該線程的名字
int getPriority()
返回該線程的優先級
StackTraceElement[] getStackTrace()
返回表示該線程堆棧轉儲的堆棧跟蹤元素的數組
Thread.State getState()
返回此線程的狀態
ThreadGroup getThreadGroup()
返回該線程所屬的線程組
Thread.UncaughtExceptionHandler getUncaughtExceptionHandler()
返回由于未捕獲異常而突然終止此線程時調用的處理程序
static boolean holdsLock(Object obj)
如果且僅當當前線程持有指定對象上的監視鎖時,返回true
void interrupt()
中斷這個線程
static boolean interrupted()
測試當前線程是否被中斷
boolean isAlive()
測試這個線程是否為存活
boolean isDaemon()
測試這個線程是否是一個守護線程
boolean isInterrupted()
測試這個線程是否被中斷
void join()
等待這個線程結束
void join(long millis)
最多等待millis毫秒后結束此線程
void join(long millis, int nanos)
最多等待millis毫秒加上nanos納米后結束此線程
void resume()
已廢棄。該方法僅用于使用suspend(),因為它容易死鎖,所以已被棄用。
void run()
如果這個線程是使用一個多帶帶的Runnable run對象構造的,那么將調用該Runnable對象的run方法,否則,此方法將不執行任何操作并返回。
void setContextClassLoader(ClassLoader cl)
設置此線程的上下文類加載器
void setDaemon(boolean on)
將此線程標記為守護線程或用戶線程
static void setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)
設置由于未捕獲異常而導致線程突然終止時調用的默認處理程序,并且沒有為該線程定義其他處理程序
void setName(String name)
將此線程的名稱更改為與參數name相等的名稱
void setPriority(int newPriority)
更改此線程的優先級
void setUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)
設置由于未捕獲異常而突然終止此線程時調用的處理程序
static void sleep(long millis)
使當前執行的線程在指定的毫秒數內處于休眠狀態(暫時停止執行),取決于系統定時器和調度器的精度和準確性。
static void sleep(long millis, int nanos)
使當前執行的線程在指定的毫秒數加上指定的納秒數的情況下休眠(暫時停止執行),取決于系統定時器和調度器的精度和準確性
void start()
使該線程開始執行,Java虛擬機調用這個線程的run方法
void stop()
已廢棄。這個方法本質上是不安全的,使用Thread.stop停止一個線程會使它解鎖它已鎖定的所有監視器(作為未檢查的ThreadDeath異常向堆棧傳播的自然結果),如果這些監視器之前保護的任何對象處于不一致的狀態,則損壞的對象會對其他線程可見,從而可能導致任意行為。應該用簡單地修改某些變量以表明目標線程應該停止運行的代碼來替換stop的許多用法。目標線程應該定期檢查這個變量,如果該變量表明它將停止運行,則以有序的方式從它的run方法返回。如果目標線程等待很長時間(例如,在條件變量上),則應該使用中斷方法來中斷等待。
void stop(Throwable obj)
已廢棄。這種方法最初的目的是迫使線程停止并拋出一個給定的可拋出的異常,它本質上是不安全的(參見stop()),而且還可以用于生成目標線程不準備處理的異常。
void suspend()
已廢棄。這個方法已經被棄用,因為它天生就容易死鎖。如果目標線程在監視器上持有鎖,以保護掛起的關鍵系統資源,則在目標線程恢復之前,沒有線程可以訪問該資源。如果要恢復目標線程的線程試圖在調用resume之前鎖定此監視器,則會導致死鎖。這種死鎖通常表現為“凍結”進程。
String toString()
返回該線程的字符串表示形式,包括該線程的名稱、優先級和線程組
static void yield()
給調度器的一個提示,說明當前線程愿意提供當前對處理器的使用
從類java.lang.Object繼承的方法equals, finalize, getClass, hashCode, notify, notifyAll, wait
字段的細節MIN_PRIORITYpublic static final int MIN_PRIORITY = 1
線程可以擁有的最小優先級。
NORM_PRIORITYpublic static final int NORM_PRIORITY = 5
分配給線程的默認優先級。
MAX_PRIORITY構造函數的細節public static final int MAX_PRIORITY = 10
線程可以擁有的最大優先級。
Threadpublic Thread()
分配一個新的線程對象,這個構造函數具有與Thread (null, null, gname)相同的效果,其中gname是一個新生成的名稱,自動生成的名稱為“Thread-”+n形式,其中n為整數。
Threadpublic Thread(Runnable target)
分配一個新的線程對象,這個構造函數具有與Thread (null, target, gname)相同的效果,其中gname是一個新生成的名稱,自動生成的名稱為“Thread-”+n形式,其中n為整數。
參數:
target - 在啟動該線程時調用其run方法的對象,如果為null,這個類run方法什么都不做。
Threadpublic Thread(ThreadGroup group, Runnable target)
分配一個新的線程對象,這個構造函數具有與Thread (group, target, gname)相同的效果,其中gname是一個新生成的名稱,自動生成的名稱為“Thread-”+n形式,其中n為整數。
參數:
group - 線程組,如果null并且有一個安全管理器,那么組由SecurityManager.getThreadGroup()決定,如果沒有安全管理器或SecurityManager.getThreadGroup()返回null,則將組設置為當前線程的線程組。
target - 在啟動該線程時調用其run方法的對象,如果為null,這個類run方法什么都不做。
Throws:
SecurityException - 如果當前線程不能在指定的線程組中創建線程。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/71189.html
摘要:開發中不可避免用到多線程情況,比如中常見的都是運用到多線程,多線程的根本目的是為了更快的執行。其他常用到的多線程比如設計到大量操作用多線程可明顯提升效率。中最基礎的并發類就是是一個接口,只要實現實現,重寫方法就可以實現多線程操作。 java開發中不可避免用到多線程情況,比如web中常見的Servlet、Struts2都是運用到多線程,多線程的根本目的是為了更快的執行。其他常用到的多線程...
摘要:時間年月日星期六說明本文部分內容均來自慕課網。慕課網教學源碼無學習源碼第一章課前準備前言課程說明比較和這兩種線程創建的方式,需要知道和的基本創建方式。一旦主線程獲取到了用戶的輸入,這時候,阻塞就會解除掉,主線程繼續運行,直到結束。 時間:2017年07月08日星期六說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com教學源碼:無學習源碼:https://g...
摘要:多線程同步工具箱之篇前言的多線程協調工具,,,都是在多線程代碼中使用比較多的工具類之一。毫不夸張的說,這幾個類,是等同于解決多線程問的包,實在有必要添加到程序員的工具箱里面。 Java多線程同步工具箱之CountDownLatch篇 前言 Java的多線程協調工具CountDownLatch,Semaphore,CyclicBarrier,ReadWriteLock都是在多線程代碼中使...
摘要:本人郵箱歡迎轉載轉載請注明網址代碼已經全部托管有需要的同學自行下載引言做的同學們或多或少的接觸過集合框架在集合框架中大多的集合類是線程不安全的比如我們常用的等等我們寫一個例子看為什么說是不安全的例子證明是線程不安全的我們開啟個線程每個線程向 本人郵箱: 歡迎轉載,轉載請注明網址 http://blog.csdn.net/tianshi_kcogithub: https://github...
摘要:本人郵箱歡迎轉載轉載請注明網址代碼已經全部托管有需要的同學自行下載理論主要提供更多鎖的特性讓線程能獲取同步方法或同步塊的執行它們提供更多的靈活的結果能擁有不多的屬性并且可以配合類提供多樣的組合一個是控制多線程去訪問一個共享的資源一般來說一個 本人郵箱: 歡迎轉載,轉載請注明網址 http://blog.csdn.net/tianshi_kcogithub: https://github...
閱讀 2732·2023-04-25 14:21
閱讀 1167·2021-11-23 09:51
閱讀 4000·2021-09-22 15:43
閱讀 605·2019-08-30 15:55
閱讀 1550·2019-08-29 11:28
閱讀 2438·2019-08-26 11:44
閱讀 1675·2019-08-23 18:15
閱讀 2874·2019-08-23 16:42