成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

java多線程之Thread類

jzzlee / 1390人閱讀

摘要:實(shí)現(xiàn)接口直接被繼承的子類是程序中的執(zhí)行線程,虛擬機(jī)允許應(yīng)用程序同時(shí)運(yùn)行多個(gè)執(zhí)行線程。如果要恢復(fù)目標(biāo)線程的線程試圖在調(diào)用之前鎖定此監(jiān)視器,則會導(dǎo)致死鎖。線程可以擁有的最大優(yōu)先級。

Class Thread
java.lang.Object
     java.lang.Thread

實(shí)現(xiàn)接口:Runnable
直接被繼承的子類:ForkJoinWorkerThread

public class Thread
extends Object
implements Runnable

thread是程序中的執(zhí)行線程,Java虛擬機(jī)允許應(yīng)用程序同時(shí)運(yùn)行多個(gè)執(zhí)行線程。

每個(gè)線程都有一個(gè)優(yōu)先級,優(yōu)先級較高的線程優(yōu)先于優(yōu)先級較低的線程執(zhí)行,每個(gè)線程都可能被標(biāo)記為一個(gè)守護(hù)線程。當(dāng)在某個(gè)線程中運(yùn)行的代碼創(chuàng)建一個(gè)新的線程對象時(shí),新線程的優(yōu)先級初始設(shè)置為創(chuàng)建它的線程的優(yōu)先級,并且當(dāng)且僅當(dāng)創(chuàng)建它的線程是一個(gè)守護(hù)線程時(shí),它是一個(gè)守護(hù)線程。

當(dāng)Java虛擬機(jī)啟動(dòng)時(shí),通常只有一個(gè)非守護(hù)線程(通常稱為某些指定類的main方法),Java虛擬機(jī)繼續(xù)執(zhí)行線程,直到發(fā)生以下任何一種情況:

類的exit方法在運(yùn)行時(shí)被調(diào)用,并且安全管理器允許exit操作發(fā)生。

所有非守護(hù)線程都已死亡,要么從調(diào)用run方法那里返回,要么拋出一個(gè)傳播到run方法之外的異常。

有兩種方法可以創(chuàng)建一個(gè)新的執(zhí)行線程,一種方法是將類聲明為Thread的子類,這個(gè)子類應(yīng)該重寫類Threadrun方法,然后可以分配并啟動(dòng)子類的一個(gè)實(shí)例。例如,一個(gè)計(jì)算大于指定值的素?cái)?shù)的線程可以這樣寫:

class PrimeThread extends Thread {
    PrimeThread(long minPrime) {
        this.minPrime = minPrime;
    }

    public void run() {
        // compute primes larger than minPrime
          . . .
    }
}

下面的代碼將創(chuàng)建一個(gè)線程并啟動(dòng)運(yùn)行:

PrimeThread p = new PrimeThread(143);
p.start();

另一種創(chuàng)建線程的方法是聲明實(shí)現(xiàn)Runnable接口的類,該類實(shí)現(xiàn)run方法,然后可以分配類的一個(gè)實(shí)例,在創(chuàng)建線程時(shí)作為參數(shù)傳遞,并啟動(dòng)。另一種風(fēng)格中的相同示例如下:

class PrimeRun implements Runnable {
    long minPrime;
    PrimeRun(long minPrime) {
        this.minPrime = minPrime;
    }

    public void run() {
        // compute primes larger than minPrime
          . . .
    }
}

下面的代碼將創(chuàng)建一個(gè)線程并啟動(dòng)運(yùn)行:

PrimeRun p = new PrimeRun(143);
new Thread(p).start();

每個(gè)線程都有一個(gè)用于標(biāo)識的名稱,多個(gè)線程可能具有相同的名稱,如果在創(chuàng)建線程時(shí)沒有指定名稱,將為它生成一個(gè)新名稱。

除非另外注明,將null參數(shù)傳遞給該類的構(gòu)造函數(shù)或方法將導(dǎo)致拋出NullPointerException。

自:JDK1.0,相關(guān)類和方法:Runnable,Runtime.exit(int),run(),stop()

內(nèi)嵌類匯總

static class Thread.State

線程的狀態(tài)

static interface Thread.UncaughtExceptionHandler

當(dāng)線程因未捕獲異常而突然終止時(shí)調(diào)用的處理程序的接口

字段匯總

static int MAX_PRIORITY

線程可以擁有的最大優(yōu)先級

static int MIN_PRIORITY

線程可以擁有的最小優(yōu)先級

static int NORM_PRIORITY

分配給線程的默認(rèn)優(yōu)先級

構(gòu)造函數(shù)匯總

Thread()

分配一個(gè)新的線程對象

Thread(Runnable target)

分配一個(gè)新的線程對象,使其具有target作為其運(yùn)行對象

Thread(Runnable target, String name)

分配一個(gè)新的線程對象,使其具有target作為其運(yùn)行對象,并具有指定的name作為其名稱

Thread(String name)

分配一個(gè)新的線程對象,具有指定的name作為其名稱

Thread(ThreadGroup group, Runnable target)

分配一個(gè)新的線程對象,使其具有target作為其運(yùn)行對象,并且屬于group引用的線程組

Thread(ThreadGroup group, Runnable target, String name)

分配一個(gè)新的線程對象,使其具有target作為其運(yùn)行對象,具有指定的name作為其名稱,并且屬于group引用的線程組

Thread(ThreadGroup group, Runnable target, String name, long stackSize)

分配一個(gè)新的線程對象,使其具有target作為其運(yùn)行對象,具有指定的name作為其名稱,并且屬于由group引用的線程組,并具有指定的堆棧大小。

Thread(ThreadGroup group, String name)

分配一個(gè)新的線程對象,具有指定的name作為其名稱,并且屬于由group引用的線程組

方法匯總

static int activeCount()

返回當(dāng)前線程組及其子組中活動(dòng)線程的數(shù)量的估算

void checkAccess()

確定當(dāng)前運(yùn)行的線程是否具有修改該線程的權(quán)限

protected Object clone()

一個(gè)線程被沒有意義的克隆將拋出CloneNotSupportedException

int countStackFrames()

已廢棄。這個(gè)調(diào)用的定義依賴于suspend(),它已被廢棄,此外,這個(gè)調(diào)用的結(jié)果從來沒有明確的定義

static Thread currentThread()

返回對當(dāng)前執(zhí)行的線程對象的引用

void destroy()

已廢棄。此方法最初設(shè)計(jì)為在不進(jìn)行任何清理的情況下銷毀此線程,它所持有的任何監(jiān)視器都將保持鎖定狀態(tài),然而,該方法從未實(shí)現(xiàn),如果要實(shí)現(xiàn)的話,它很可能會像suspend()那樣出現(xiàn)死鎖。如果目標(biāo)線程在被銷毀時(shí)持有保護(hù)關(guān)鍵系統(tǒng)資源的鎖,則沒有線程可以再次訪問該資源,如果另一個(gè)線程試圖鎖定該資源,則會導(dǎo)致死鎖。這種死鎖通常表現(xiàn)為“凍結(jié)”進(jìn)程。

static void dumpStack()

將當(dāng)前線程的堆棧跟蹤打印到標(biāo)準(zhǔn)錯(cuò)誤流

static int enumerate(Thread[] tarray)

將當(dāng)前線程組及其子組中的每個(gè)活動(dòng)線程復(fù)制到指定的數(shù)組中

static Map getAllStackTraces()

返回所有活動(dòng)線程的堆棧跟蹤map

ClassLoader getContextClassLoader()

返回該線程的上下文類加載器

static Thread.UncaughtExceptionHandler getDefaultUncaughtExceptionHandler()

返回由于未捕獲異常而突然終止的線程時(shí)調(diào)用的默認(rèn)處理程序

long getId()

返回該線程的標(biāo)識符

String getName()

返回該線程的名字

int getPriority()

返回該線程的優(yōu)先級

StackTraceElement[] getStackTrace()

返回表示該線程堆棧轉(zhuǎn)儲的堆棧跟蹤元素的數(shù)組

Thread.State getState()

返回此線程的狀態(tài)

ThreadGroup getThreadGroup()

返回該線程所屬的線程組

Thread.UncaughtExceptionHandler getUncaughtExceptionHandler()

返回由于未捕獲異常而突然終止此線程時(shí)調(diào)用的處理程序

static boolean holdsLock(Object obj)

如果且僅當(dāng)當(dāng)前線程持有指定對象上的監(jiān)視鎖時(shí),返回true

void interrupt()

中斷這個(gè)線程

static boolean interrupted()

測試當(dāng)前線程是否被中斷

boolean isAlive()

測試這個(gè)線程是否為存活

boolean isDaemon()

測試這個(gè)線程是否是一個(gè)守護(hù)線程

boolean isInterrupted()

測試這個(gè)線程是否被中斷

void join()

等待這個(gè)線程結(jié)束

void join(long millis)

最多等待millis毫秒后結(jié)束此線程

void join(long millis, int nanos)

最多等待millis毫秒加上nanos納米后結(jié)束此線程

void resume()

已廢棄。該方法僅用于使用suspend(),因?yàn)樗菀姿梨i,所以已被棄用。

void run()

如果這個(gè)線程是使用一個(gè)多帶帶的Runnable run對象構(gòu)造的,那么將調(diào)用該Runnable對象的run方法,否則,此方法將不執(zhí)行任何操作并返回。

void setContextClassLoader(ClassLoader cl)

設(shè)置此線程的上下文類加載器

void setDaemon(boolean on)

將此線程標(biāo)記為守護(hù)線程或用戶線程

static void setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)

設(shè)置由于未捕獲異常而導(dǎo)致線程突然終止時(shí)調(diào)用的默認(rèn)處理程序,并且沒有為該線程定義其他處理程序

void setName(String name)

將此線程的名稱更改為與參數(shù)name相等的名稱

void setPriority(int newPriority)

更改此線程的優(yōu)先級

void setUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)

設(shè)置由于未捕獲異常而突然終止此線程時(shí)調(diào)用的處理程序

static void sleep(long millis)

使當(dāng)前執(zhí)行的線程在指定的毫秒數(shù)內(nèi)處于休眠狀態(tài)(暫時(shí)停止執(zhí)行),取決于系統(tǒng)定時(shí)器和調(diào)度器的精度和準(zhǔn)確性。

static void sleep(long millis, int nanos)

使當(dāng)前執(zhí)行的線程在指定的毫秒數(shù)加上指定的納秒數(shù)的情況下休眠(暫時(shí)停止執(zhí)行),取決于系統(tǒng)定時(shí)器和調(diào)度器的精度和準(zhǔn)確性

void start()

使該線程開始執(zhí)行,Java虛擬機(jī)調(diào)用這個(gè)線程的run方法

void stop()

已廢棄。這個(gè)方法本質(zhì)上是不安全的,使用Thread.stop停止一個(gè)線程會使它解鎖它已鎖定的所有監(jiān)視器(作為未檢查的ThreadDeath異常向堆棧傳播的自然結(jié)果),如果這些監(jiān)視器之前保護(hù)的任何對象處于不一致的狀態(tài),則損壞的對象會對其他線程可見,從而可能導(dǎo)致任意行為。應(yīng)該用簡單地修改某些變量以表明目標(biāo)線程應(yīng)該停止運(yùn)行的代碼來替換stop的許多用法。目標(biāo)線程應(yīng)該定期檢查這個(gè)變量,如果該變量表明它將停止運(yùn)行,則以有序的方式從它的run方法返回。如果目標(biāo)線程等待很長時(shí)間(例如,在條件變量上),則應(yīng)該使用中斷方法來中斷等待。

void stop(Throwable obj)

已廢棄。這種方法最初的目的是迫使線程停止并拋出一個(gè)給定的可拋出的異常,它本質(zhì)上是不安全的(參見stop()),而且還可以用于生成目標(biāo)線程不準(zhǔn)備處理的異常。

void suspend()

已廢棄。這個(gè)方法已經(jīng)被棄用,因?yàn)樗焐腿菀姿梨i。如果目標(biāo)線程在監(jiān)視器上持有鎖,以保護(hù)掛起的關(guān)鍵系統(tǒng)資源,則在目標(biāo)線程恢復(fù)之前,沒有線程可以訪問該資源。如果要恢復(fù)目標(biāo)線程的線程試圖在調(diào)用resume之前鎖定此監(jiān)視器,則會導(dǎo)致死鎖。這種死鎖通常表現(xiàn)為“凍結(jié)”進(jìn)程。

String toString()

返回該線程的字符串表示形式,包括該線程的名稱、優(yōu)先級和線程組

static void yield()

給調(diào)度器的一個(gè)提示,說明當(dāng)前線程愿意提供當(dāng)前對處理器的使用

從類java.lang.Object繼承的方法

equals, finalize, getClass, hashCode, notify, notifyAll, wait

字段的細(xì)節(jié)
MIN_PRIORITY

public static final int MIN_PRIORITY = 1

線程可以擁有的最小優(yōu)先級。

NORM_PRIORITY

public static final int NORM_PRIORITY = 5

分配給線程的默認(rèn)優(yōu)先級。

MAX_PRIORITY

public static final int MAX_PRIORITY = 10

線程可以擁有的最大優(yōu)先級。

構(gòu)造函數(shù)的細(xì)節(jié)
Thread

public Thread()

分配一個(gè)新的線程對象,這個(gè)構(gòu)造函數(shù)具有與Thread (null, null, gname)相同的效果,其中g(shù)name是一個(gè)新生成的名稱,自動(dòng)生成的名稱為“Thread-”+n形式,其中n為整數(shù)。

Thread

public Thread(Runnable target)

分配一個(gè)新的線程對象,這個(gè)構(gòu)造函數(shù)具有與Thread (null, target, gname)相同的效果,其中g(shù)name是一個(gè)新生成的名稱,自動(dòng)生成的名稱為“Thread-”+n形式,其中n為整數(shù)。

參數(shù)
target - 在啟動(dòng)該線程時(shí)調(diào)用其run方法的對象,如果為null,這個(gè)類run方法什么都不做。

Thread

public Thread(ThreadGroup group, Runnable target)

分配一個(gè)新的線程對象,這個(gè)構(gòu)造函數(shù)具有與Thread (group, target, gname)相同的效果,其中g(shù)name是一個(gè)新生成的名稱,自動(dòng)生成的名稱為“Thread-”+n形式,其中n為整數(shù)。

參數(shù)
group - 線程組,如果null并且有一個(gè)安全管理器,那么組由SecurityManager.getThreadGroup()決定,如果沒有安全管理器或SecurityManager.getThreadGroup()返回null,則將組設(shè)置為當(dāng)前線程的線程組。
target - 在啟動(dòng)該線程時(shí)調(diào)用其run方法的對象,如果為null,這個(gè)類run方法什么都不做。
Throws:
SecurityException - 如果當(dāng)前線程不能在指定的線程組中創(chuàng)建線程。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/71189.html

相關(guān)文章

  • java并發(fā)Thread和Runnable

    摘要:開發(fā)中不可避免用到多線程情況,比如中常見的都是運(yùn)用到多線程,多線程的根本目的是為了更快的執(zhí)行。其他常用到的多線程比如設(shè)計(jì)到大量操作用多線程可明顯提升效率。中最基礎(chǔ)的并發(fā)類就是是一個(gè)接口,只要實(shí)現(xiàn)實(shí)現(xiàn),重寫方法就可以實(shí)現(xiàn)多線程操作。 java開發(fā)中不可避免用到多線程情況,比如web中常見的Servlet、Struts2都是運(yùn)用到多線程,多線程的根本目的是為了更快的執(zhí)行。其他常用到的多線程...

    darkbug 評論0 收藏0
  • 慕課網(wǎng)_《細(xì)說線程Thread VS Runnable》學(xué)習(xí)總結(jié)

    摘要:時(shí)間年月日星期六說明本文部分內(nèi)容均來自慕課網(wǎng)。慕課網(wǎng)教學(xué)源碼無學(xué)習(xí)源碼第一章課前準(zhǔn)備前言課程說明比較和這兩種線程創(chuàng)建的方式,需要知道和的基本創(chuàng)建方式。一旦主線程獲取到了用戶的輸入,這時(shí)候,阻塞就會解除掉,主線程繼續(xù)運(yùn)行,直到結(jié)束。 時(shí)間:2017年07月08日星期六說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學(xué)源碼:無學(xué)習(xí)源碼:https://g...

    netScorpion 評論0 收藏0
  • Java線程同步工具箱CountDownLatch篇

    摘要:多線程同步工具箱之篇前言的多線程協(xié)調(diào)工具,,,都是在多線程代碼中使用比較多的工具類之一。毫不夸張的說,這幾個(gè)類,是等同于解決多線程問的包,實(shí)在有必要添加到程序員的工具箱里面。 Java多線程同步工具箱之CountDownLatch篇 前言 Java的多線程協(xié)調(diào)工具CountDownLatch,Semaphore,CyclicBarrier,ReadWriteLock都是在多線程代碼中使...

    lufficc 評論0 收藏0
  • (十五)java線程并發(fā)集合ArrayBlockingQueue

    摘要:本人郵箱歡迎轉(zhuǎn)載轉(zhuǎn)載請注明網(wǎng)址代碼已經(jīng)全部托管有需要的同學(xué)自行下載引言做的同學(xué)們或多或少的接觸過集合框架在集合框架中大多的集合類是線程不安全的比如我們常用的等等我們寫一個(gè)例子看為什么說是不安全的例子證明是線程不安全的我們開啟個(gè)線程每個(gè)線程向 本人郵箱: 歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明網(wǎng)址 http://blog.csdn.net/tianshi_kcogithub: https://github...

    stefan 評論0 收藏0
  • (五)java線程Lock

    摘要:本人郵箱歡迎轉(zhuǎn)載轉(zhuǎn)載請注明網(wǎng)址代碼已經(jīng)全部托管有需要的同學(xué)自行下載理論主要提供更多鎖的特性讓線程能獲取同步方法或同步塊的執(zhí)行它們提供更多的靈活的結(jié)果能擁有不多的屬性并且可以配合類提供多樣的組合一個(gè)是控制多線程去訪問一個(gè)共享的資源一般來說一個(gè) 本人郵箱: 歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明網(wǎng)址 http://blog.csdn.net/tianshi_kcogithub: https://github...

    googollee 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<