国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

多線程細(xì)節(jié)

2019-11-14 15:01:50
字體:
供稿:網(wǎng)友

1、sleep和wait方法的異同

  sleep和wait都可以讓線程睡眠

  不同:

    sleep需要指定時(shí)間,而wait可以指定時(shí)間,也可以不用指定時(shí)間。

    sleep時(shí)間到了線程就會重新恢復(fù)到運(yùn)行狀態(tài)。wait如果沒有指定時(shí)間,必須通過notify、notifyAll方法來喚醒

    sleep可以使用同步代碼塊中,也可以不使用同步代碼塊中,wait必須使用同步代碼塊中。

    sleep睡眠后不會釋放鎖,而wait會釋放鎖。

2、停止線程和interrupt方法

  一般情況下線程要結(jié)束,都是通過run方法運(yùn)行完成,線程就結(jié)束了。如果要線程提前中止運(yùn)行,可以使用stop方法。但是stop方法過時(shí)了,原因有不安全因素。stop方法中給出了相應(yīng)的解決方案:在線程中可以定義一些變量或者標(biāo)記,然后在線程運(yùn)行的期間,判斷這個(gè)變量或者標(biāo)記,最終讓線程執(zhí)行的仍然運(yùn)行完成。如果線程長時(shí)間處于等待(凍結(jié))狀態(tài)可以使用interrupt方法來中斷這種等待。

  interrupt()  其實(shí)是把線程這種等待狀態(tài)給清除,讓線程重新恢復(fù)到運(yùn)行狀態(tài)。

3、守護(hù)線程、線程組、線程優(yōu)先級

  守護(hù)線程:后臺線程。當(dāng)我們直接創(chuàng)建的線程,沒有設(shè)置它的任何屬性時(shí),這個(gè)線程一般都屬于非守護(hù)線程(前臺線程)。

  非守護(hù)線程,它和主線程一起執(zhí)行,當(dāng)主線程執(zhí)行完成之后,如果還有其他非守護(hù)線程沒有執(zhí)行結(jié)束,當(dāng)前程序依然在正常的運(yùn)行。

  守護(hù)線程:它也是用來執(zhí)行線程任務(wù)的,它會隨著非守護(hù)線程一起執(zhí)行。當(dāng)程序中沒有任何一個(gè)非守護(hù)線程在運(yùn)行時(shí),這時(shí)不管有多少個(gè)守護(hù)線程,它們及時(shí)沒有執(zhí)行完成,程序也會自動停止運(yùn)行。守護(hù)線程就自動結(jié)束運(yùn)行了。

 

  線程組:把完成類似功能的線程可以合并在一起,使用一個(gè)組來管理當(dāng)前這些線程,即可以通過組的方式來管理線程。

 

  線程優(yōu)先級:線程優(yōu)先級采用數(shù)字來標(biāo)識,從1開始到10,一般情況下會使用1   5   10  來標(biāo)記當(dāng)前的線程的優(yōu)先級

優(yōu)先級高的線程執(zhí)行的次數(shù)會比優(yōu)先級低的線程多。優(yōu)先級高,只能讓cpu執(zhí)行到這個(gè)線程的幾率變高,而不是說cpu就一直在執(zhí)行它。

getPriority()   獲取當(dāng)前線程的優(yōu)先級

setPriority(int newPriority)  設(shè)置線程的優(yōu)先級,newPriority參數(shù)可以是1-10!建議設(shè)置的時(shí)候1  5  10 這三個(gè)數(shù)字。

  守護(hù)線程源碼

 1 //測試線程停止和中斷等待 2  3 class Demo implements Runnable 4 { 5     boolean flag = false; 6     public void run() 7     { 8         int num = 1; 9         while( num<20 )10         {11             System.out.println(Thread.currentThread().getName()+"......"+num++);12         }13     }14 }15 class ThreadDemo2 16 {17     public static void main(String[] args) throws InterruptedException18     {19         Demo d = new Demo();20 21         Thread t = new Thread(d);22         Thread t2 = new Thread(d);23         t.setPriority(10);24         t2.setPriority(1); 25 26         //把2個(gè)線程都設(shè)置成守護(hù)線程27         t.setDaemon(true);28         t2.setDaemon(true);29         t.start();30         t2.start();31 32         for( int i=0;i<10;i++ )33         {34             System.out.println(Thread.currentThread().getName()+"========"+i);35             //讓主線程臨時(shí)停頓36             Thread.yield();37         }38 39         System.out.println("........................."+t);40     }41 }

4、join和yield方法介紹

  join()  讓某個(gè)線程強(qiáng)制加入到當(dāng)前cpu的執(zhí)行隊(duì)列中。在使用join加入其他線程到運(yùn)行狀態(tài)中來時(shí),這個(gè)加入的語句肯定是寫在其他的線程的執(zhí)行代碼中。書寫加入線程的代碼所在的那個(gè)線程此時(shí)就會處理臨時(shí)凍結(jié)狀態(tài),等待被加入的線程執(zhí)行結(jié)束后,它就立刻恢復(fù)運(yùn)行的狀態(tài)。

  yield()  讓當(dāng)前正在執(zhí)行的臨時(shí)停頓一下,然后立刻就恢復(fù)運(yùn)行狀態(tài)。

 

 多線程需要掌握的技術(shù):

  1、創(chuàng)建線程的2種方式  繼承Thread和實(shí)現(xiàn)Runnable接口

  2、掌握線程的安全問題發(fā)生的原因和解決

  3、掌握單生產(chǎn)和單消費(fèi)的原理以及等待喚醒機(jī)制

5、面試題

  

  


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 仪陇县| 曲周县| 富民县| 樟树市| 浪卡子县| 婺源县| 乐至县| 二连浩特市| 新源县| 迁安市| 莱芜市| 六安市| 龙海市| 南木林县| 静宁县| 张北县| 苍山县| 城市| 庆城县| 南康市| 光泽县| 平南县| 镇宁| 太保市| 武冈市| 合山市| 枞阳县| 广饶县| 天峨县| 芜湖市| 定兴县| 大关县| 仪陇县| 偏关县| 遵化市| 博客| 麻江县| 巴楚县| 红河县| 白朗县| 新安县|