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

資訊專欄INFORMATION COLUMN

java多線程(3)Thread的靜態(tài)方法

Yu_Huang / 1087人閱讀

摘要:方法返回當(dāng)前線程的構(gòu)造方法執(zhí)行結(jié)果構(gòu)造方法在初始化的過程中都是在主線程執(zhí)行,后開啟新線程執(zhí)行。方法是事當(dāng)前線程睡眠暫停毫秒。在睡眠過程中,線程會(huì)讓出,但不會(huì)失去已鎖定的資源。

上文介紹了Tread的實(shí)例方法,本文再介紹下Thread的靜態(tài)方法。

currentThread()

currentThread方法返回當(dāng)前線程的Object

public    class Thread1 extends Thread{
    static{
        System.out.println(Thread.currentThread().getName()+" --> static");
    }
    
    public Thread1() {
        System.out.println(Thread.currentThread().getName()+" --> 構(gòu)造方法");
    }
    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName()+" --> run");
    }
}
public static void main(String[] args) {
    Thread1 t1 = new Thread1();
    t1.start();
}

執(zhí)行結(jié)果:

main --> static
main --> 構(gòu)造方法
Thread-0 --> run

Thread1在初始化的過程中都是在主線程執(zhí)行,start后開啟新線程執(zhí)行。

sleep()

sleep方法是事當(dāng)前線程睡眠(暫停)n毫秒。在睡眠過程中,線程會(huì)讓出cpu,但不會(huì)失去已鎖定的資源。

        Thread t = new Thread(new Runnable() {
            @Override
        public void run() {
                try {
                    Long t1 = System.currentTimeMillis();
                    System.out.println("start at:"+t1);
                    Thread.sleep(2000);
                    Long t2 = System.currentTimeMillis();
                    System.out.println("end at:"+t2);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });
        t.start();

執(zhí)行結(jié)果:

start at:1511096714406
end at:1511096716407

考慮到系統(tǒng)時(shí)間分配等因素,執(zhí)行結(jié)果都會(huì)大于等于指定的毫秒數(shù),但不會(huì)差太多。另外sleep方法會(huì)拋出InterruptedException 的異常,在上文中也有講到。

yield()

yield方法是讓出cpu的使用,讓出多少時(shí)間是不確定的。

public class YieldTest extends Thread{

    public YieldTest(String name) {  
        super(name);  
    }  
  
    @Override  
    public void run() {  
        for (int i = 1; i <= 50; i++) {  
            System.out.println("" + this.getName() + "-----" + i);  
            if (i == 30) {  
                this.yield();  
            }  
        }  
    }  
  
    public static void main(String[] args) {  
        YieldTest yt1 = new YieldTest("張三");  
        YieldTest yt2 = new YieldTest("李四");  
        yt1.start();  
        yt2.start();  
    }  
}

部分的執(zhí)行結(jié)果:

......
張三-----28
張三-----29
張三-----30
李四-----17
李四-----18
李四-----19
李四-----20
.....

當(dāng)然每次執(zhí)行的結(jié)果可能都不一樣,這里可以看在執(zhí)行到i==30時(shí),"張三"讓出了cpu使用,"李四"則開始執(zhí)行。

interrupted()

返回當(dāng)前線程是否被中斷,實(shí)現(xiàn)就是

 return currentThread().isInterrupted(true);
holdsLock(Object obj)

holdsLock是判斷某個(gè)資源是否被線程鎖定,

public    class Thread1 extends Thread{
    
    private Object obj = new Object();
    @Override
    public void run() {
        synchronized (obj) {
            System.out.println("holdsLock1="+Thread.holdsLock(obj));
        }
        System.out.println("holdsLock2="+Thread.holdsLock(obj));
    }
    
}
    public static void main(String[] args) {
        Thread1 t1 = new Thread1();
        t1.start();

執(zhí)行結(jié)果:

holdsLock1=true
holdsLock2=false

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

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

相關(guān)文章

  • Java 線程編程基礎(chǔ)——Thread

    摘要:程序執(zhí)行時(shí),至少會(huì)有一個(gè)線程在運(yùn)行,這個(gè)運(yùn)行的線程被稱為主線程。程序的終止是指除守護(hù)線程以外的線程全部終止。多線程程序由多個(gè)線程組成的程序稱為多線程程序。線程休眠期間可以被中斷,中斷將會(huì)拋出異常。 線程 我們?cè)陂喿x程序時(shí),表面看來是在跟蹤程序的處理流程,實(shí)際上跟蹤的是線程的執(zhí)行。 單線程程序 在單線程程序中,在某個(gè)時(shí)間點(diǎn)執(zhí)行的處理只有一個(gè)。 Java 程序執(zhí)行時(shí),至少會(huì)有一個(gè)線程在運(yùn)行...

    zhoutk 評(píng)論0 收藏0
  • Java synchronized 線程同步問題詳解

    摘要:同步代碼塊二類,鎖是小括號(hào)中的類對(duì)象對(duì)象。因?yàn)閷?duì)于同一個(gè)實(shí)例對(duì)象,各線程之間訪問其中的同步方法是互斥的。優(yōu)化同步代碼塊的方式有,減少同步區(qū)域或減小鎖的范圍。 版權(quán)聲明:本文由吳仙杰創(chuàng)作整理,轉(zhuǎn)載請(qǐng)注明出處:https://segmentfault.com/a/1190000009225706 1. 引言 在 Java 多線程編程中,我們常需要考慮線程安全問題,其中關(guān)鍵字 synchro...

    Eidesen 評(píng)論0 收藏0
  • java線程:synchronized

    摘要:非靜態(tài)方法以及方法內(nèi)部的代碼塊持有的是同一個(gè)對(duì)象鎖,它們是同步執(zhí)行的??芍厝腈i使用時(shí),當(dāng)一個(gè)線程請(qǐng)求一個(gè)對(duì)象鎖時(shí),再次請(qǐng)求該鎖是可以立即得到的。出現(xiàn)異常,會(huì)自動(dòng)釋放鎖同步方法與同步代碼塊作用于整個(gè)方法,可能引起方法執(zhí)行效率下降。 synchronize可以在多個(gè)線程操作同一個(gè)成員變量或者方法時(shí),實(shí)現(xiàn)同步(或者互斥)的效果。synchronized可以作用于方法,以及方法內(nèi)部的代碼塊。 ...

    entner 評(píng)論0 收藏0
  • Java011-線程

    摘要:多線程進(jìn)程正在進(jìn)行中的程序。所以容易出現(xiàn)線程安全問題。等待喚醒機(jī)制涉及的方法將同步中的線程處于凍結(jié)狀態(tài)。返回該線程的字符串表示形式,包括線程名稱優(yōu)先級(jí)和線程組。暫停當(dāng)前正在執(zhí)行的線程對(duì)象,并執(zhí)行其他線程。 多線程:進(jìn)程:正在進(jìn)行中的程序。其實(shí)進(jìn)程就是一個(gè)應(yīng)用程序運(yùn)行時(shí)的內(nèi)存分配空間。線程:其實(shí)就是進(jìn)程中一個(gè)程序執(zhí)行控制單元,一條執(zhí)行路徑。進(jìn)程負(fù)責(zé)的是應(yīng)用程序的空間的標(biāo)示。線程負(fù)責(zé)的是應(yīng)...

    gekylin 評(píng)論0 收藏0
  • java線程詳細(xì)總結(jié)

    摘要:當(dāng)多個(gè)線程訪問實(shí)例時(shí),每個(gè)線程維護(hù)提供的獨(dú)立的變量副本。而則從另一個(gè)角度來解決多線程的并發(fā)訪問。在執(zhí)行同步代碼塊的過程中,遇到異常而導(dǎo)致線程終止。在執(zhí)行同步代碼塊的過程中,其他線程執(zhí)行了當(dāng)前對(duì)象的方法,當(dāng)前線程被暫停,但不會(huì)釋放鎖。 一、Thread.start()與Thread.run()的區(qū)別通過調(diào)用Thread類的start()方法來啟動(dòng)一個(gè)線程,這時(shí)此線程是處于就緒狀態(tài),并沒有...

    dance 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

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