日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Java util concurrent及基本線程原理簡(jiǎn)介

瀏覽:33日期:2022-09-02 17:11:33

一:什么是JUC

JUC就是java.util.concurrent下面的類包,專門用于多線程的開發(fā)。

二:進(jìn)程和線程的區(qū)別

進(jìn)程是可并發(fā)執(zhí)行的程序在某個(gè)數(shù)據(jù)集合上的一次計(jì)算活動(dòng),也是操作系統(tǒng)進(jìn)行資源分配和調(diào)度的基本單位。

線程是進(jìn)程的一個(gè)實(shí)體,是CPU調(diào)度和分派的基本單位,它是比進(jìn)程更小的能獨(dú)立運(yùn)行的基本單位.線程自己基本上不擁有系統(tǒng)資源,只擁有一點(diǎn)在運(yùn)行中必不可少的資源(如程序計(jì)數(shù)器,一組寄存器和棧),但是它可與 同屬一個(gè)進(jìn)程的其他的線程共享進(jìn)程所擁有的全部資源。

并發(fā):多線程、 多個(gè)線程操作一個(gè)資源類,快速交替過程。

并行:多核多CPU;

線程的狀態(tài):(java底層源碼)

public enum State { NEW, // 新建線程 RUNNABLE, // 線程運(yùn)行 BLOCKED, // 線程阻塞 WAITING, // 等待 TIMED_WAITING, // 延時(shí)等待 TERMINATED; // 線程銷毀}

三:wait和sleep的區(qū)別

1:類層面

wait ------object

sleep-------Thread 誰(shuí)調(diào)用誰(shuí)睡覺

2:是否釋放鎖層面

wait --------釋放鎖

sleep--------不釋放鎖

3:使用范圍層面

wait,notify,notifyall只能在同步方法中或者同步代碼塊中使用

sleep可以再任意的地方使用

4:異常

sleep必須捕獲異常

wait不需要捕獲異常

四:線程的幾種使用方式

1.優(yōu)先級(jí)

public final void setPriority(int newPriority)

更改線程的優(yōu)先級(jí)。

默認(rèn)為5,最小為1,最大為10

設(shè)置了優(yōu)先級(jí)別之后,級(jí)別高 并不是說(shuō)你一定被優(yōu)先調(diào)度,而是你的被優(yōu)先調(diào)度的概率高而已。

public class Test { public static void main(String[] args) { Tuzi tz=new Tuzi('兔子'); tz.setPriority(2); tz.start();Wugui wg=new Wugui('烏龜'); wg.setPriority(8); wg.start(); }}public class Wugui extends Thread { @Override public void run() { for (int i = 1; i <=100; i++) { System.out.println('我是烏龜我在跑。。'+'----'+this.getName()+'---'+this.getPriority()); } } public Wugui(String name) { super(name); }}

2.線程強(qiáng)制運(yùn)行:join()

可以通過join()方法使得一個(gè)線程強(qiáng)制運(yùn)行,線程強(qiáng)制運(yùn)行期間,其他線程無(wú)法運(yùn)行,必須等待此線程完成之后,才可以繼續(xù)運(yùn)行。

public final void join() throws InterruptedException

等待該線程終止。

public final void join(long millis)throws InterruptedException

等待該線程終止的時(shí)間最長(zhǎng)為 millis 毫秒。超時(shí)為 0 意味著要一直等下去。

package Thread1;class MyThread implements Runnable{ // 實(shí)現(xiàn)Runnable接口 public void run(){ // 覆寫run()方法 for(int i=0;i<50;i++){ System.out.println(Thread.currentThread().getName() + '運(yùn)行,i = ' + i) ; // 取得當(dāng)前線程的名字 } }};public class demo1{ public static void main(String args[]){ MyThread mt = new MyThread() ; // 實(shí)例化Runnable子類對(duì)象 Thread t = new Thread(mt,'線程'); // 實(shí)例化Thread對(duì)象 t.start() ; // 啟動(dòng)線程 for(int i=0;i<50;i++){ if(i>10){try{ t.join() ; // 線程強(qiáng)制運(yùn)行}catch(InterruptedException e){} } System.out.println('Main線程運(yùn)行 --> ' + i) ; } }};

3 線程的休眠(sleep)

在線程中允許一個(gè)線程進(jìn)行暫時(shí)的休眠,直接使用Thread.sleep()方法即可。

sleep定義格式:

public static void sleep(long milis,int nanos)throws InterruptedException

首先,static,說(shuō)明可以由Thread類名稱調(diào)用,其次throws表示如果有異常要在調(diào)用此方法處處理異常。

所以sleep()方法要有InterruptedException 異常處理,而且sleep()調(diào)用方法通常為Thread.sleep(500) ;形式。

控制當(dāng)前線程休眠若干毫秒

* 1秒= 1000毫秒

* 1秒 = 1000 * 1000 * 1000納秒 1000000000

package Thread1;class MyThread implements Runnable{ // 實(shí)現(xiàn)Runnable接口 public void run(){ // 覆寫run()方法 for(int i=0;i<50;i++){ try{ Thread.sleep(500) ; // 線程休眠 }catch(InterruptedException e){} System.out.println(Thread.currentThread().getName() + '運(yùn)行,i = ' + i) ; // 取得當(dāng)前線程的名字 } }};public class demo1{ public static void main(String args[]){ MyThread mt = new MyThread() ; // 實(shí)例化Runnable子類對(duì)象 Thread t = new Thread(mt,'線程'); // 實(shí)例化Thread對(duì)象 t.start() ; // 啟動(dòng)線程 }};

4.線程的禮讓(yield)

yield()方法實(shí)現(xiàn)線程的禮讓。

package Thread1;class MyThread implements Runnable{ // 實(shí)現(xiàn)Runnable接口 public void run(){ // 覆寫run()方法 for(int i=0;i<5;i++){ try{Thread.sleep(500) ;//休眠一下 }catch(Exception e){} System.out.println(Thread.currentThread().getName() + '運(yùn)行,i = ' + i) ; // 取得當(dāng)前線程的名字 if(i==2){System.out.print('線程禮讓:') ;Thread.currentThread().yield() ; // 首先獲取當(dāng)前線程,然后線程禮讓 } } }};public class demo1{ public static void main(String args[]){ MyThread my = new MyThread() ; // 實(shí)例化MyThread對(duì)象 Thread t1 = new Thread(my,'線程A') ; Thread t2 = new Thread(my,'線程B') ; t1.start() ; t2.start() ; }};

5.判斷線程是否在執(zhí)行:isAlive

class MyThread implements Runnable{ // 實(shí)現(xiàn)Runnable接口 public void run(){ // 覆寫run()方法 for(int i=0;i<3;i++){ System.out.println(Thread.currentThread().getName() + '運(yùn)行,i = ' + i) ; // 取得當(dāng)前線程的名字 } }};public class ThreadAliveDemo{ public static void main(String args[]){ MyThread mt = new MyThread() ; // 實(shí)例化Runnable子類對(duì)象 Thread t = new Thread(mt,'線程'); // 實(shí)例化Thread對(duì)象 System.out.println('線程開始執(zhí)行之前 --> ' + t.isAlive()) ; // 判斷是否啟動(dòng) t.start() ; // 啟動(dòng)線程 System.out.println('線程開始執(zhí)行之后 --> ' + t.isAlive()) ; // 判斷是否啟動(dòng) for(int i=0;i<3;i++){ System.out.println(' main運(yùn)行 --> ' + i) ; } // 以下的輸出結(jié)果不確定 System.out.println('代碼執(zhí)行之后 --> ' + t.isAlive()) ; // 判斷是否啟動(dòng) }};

6.當(dāng)前線程:CurrentThread()

程序可以通過currentThread()方法取得當(dāng)前正在運(yùn)行的線程對(duì)象,

class MyThread implements Runnable{ // 實(shí)現(xiàn)Runnable接口 public void run(){ // 覆寫run()方法 for(int i=0;i<3;i++){ System.out.println(Thread.currentThread().getName() + '運(yùn)行,i = ' + i) ; // 取得當(dāng)前線程的名字 } }};public class CurrentThreadDemo{ public static void main(String args[]){ MyThread mt = new MyThread() ; // 實(shí)例化Runnable子類對(duì)象 new Thread(mt,'線程').start() ; // 啟動(dòng)線程 mt.run() ; // 直接調(diào)用run()方法 }};

7.線程名稱

1,在Thread類中可以通過getName()方法取得線程名稱,通過setName()設(shè)置線程名稱。

2,線程的名稱一般在啟動(dòng)線程前設(shè)置,但也允許為運(yùn)行的線程設(shè)置名稱,允許兩個(gè)Thread對(duì)象有相同名稱,但是應(yīng)該避免。

3,如果程序沒有為線程指定名稱,系統(tǒng)會(huì)自動(dòng)為線程設(shè)置名稱。

class MyThread implements Runnable{ // 實(shí)現(xiàn)Runnable接口 public void run(){ // 覆寫run()方法 for(int i=0;i<3;i++){ System.out.println(Thread.currentThread().getName() + '運(yùn)行,i = ' + i) ; // 取得當(dāng)前線程的名字 } }};public class ThreadNameDemo{ public static void main(String args[]){ MyThread mt = new MyThread() ; // 實(shí)例化Runnable子類對(duì)象 new Thread(mt).start() ; // 系統(tǒng)自動(dòng)設(shè)置線程名稱 new Thread(mt,'線程-A').start() ; // 手工設(shè)置線程名稱 new Thread(mt,'線程-B').start() ; // 手工設(shè)置線程名稱 new Thread(mt).start() ; // 系統(tǒng)自動(dòng)設(shè)置線程名稱 new Thread(mt).start() ; // 系統(tǒng)自動(dòng)設(shè)置線程名稱 }};

五:幾種方法的比較

Thread.sleep(long millis),一定是當(dāng)前線程調(diào)用此方法,當(dāng)前線程進(jìn)入阻塞,但不釋放對(duì)象鎖,millis后線程自動(dòng)蘇醒進(jìn)入可運(yùn)行狀態(tài)。作用:給其它線程執(zhí)行機(jī)會(huì)的最佳方式。 Thread.yield(),一定是當(dāng)前線程調(diào)用此方法,當(dāng)前線程放棄獲取的cpu時(shí)間片,由運(yùn)行狀態(tài)變會(huì)可運(yùn)行狀態(tài),讓OS再次選擇線程。作用:讓相同優(yōu)先級(jí)的線程輪流執(zhí)行,但并不保證一定會(huì)輪流執(zhí)行。實(shí)際中無(wú)法保證yield()達(dá)到讓步目的,因?yàn)樽尣降木€程還有可能被線程調(diào)度程序再次選中。Thread.yield()不會(huì)導(dǎo)致阻塞。 t.join()/t.join(long millis),當(dāng)前線程里調(diào)用其它線程1的join方法,當(dāng)前線程阻塞,但不釋放對(duì)象鎖,直到線程1執(zhí)行完畢或者millis時(shí)間到,當(dāng)前線程進(jìn)入可運(yùn)行狀態(tài)。 obj.wait(),當(dāng)前線程調(diào)用對(duì)象的wait()方法,當(dāng)前線程釋放對(duì)象鎖,進(jìn)入等待隊(duì)列。依靠notify()/notifyAll()喚醒或者wait(long timeout)timeout時(shí)間到自動(dòng)喚醒。 obj.notify()喚醒在此對(duì)象監(jiān)視器上等待的單個(gè)線程,選擇是任意性的。notifyAll()喚醒在此對(duì)象監(jiān)視器上等待的所有線程。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
女生影院久久| 免费在线小视频| 国产精品三上| 日韩天堂av| 日韩精品一区第一页| 亚洲深深色噜噜狠狠爱网站 | 国产探花一区二区| 日本成人在线不卡视频| 日本成人在线一区| 久久精品凹凸全集| 国产欧美日本| 你懂的网址国产 欧美| 欧美国产日本| 成人高清一区| 久久婷婷一区| 9国产精品视频| 亚洲一区有码| 国产亚洲电影| 国语对白精品一区二区| 久久久免费人体| 日本欧美国产| 欧美综合另类| 久久福利毛片| 欧美伊人久久| 老牛国内精品亚洲成av人片| 成人台湾亚洲精品一区二区 | 久久精品一区二区国产| 成人污污视频| 亚洲一本视频| 亚洲欧洲美洲国产香蕉| 国产精品日韩精品在线播放| 国产一区二区三区视频在线| 久久在线电影| 最新国产拍偷乱拍精品| 青青草伊人久久| 国产一区二区三区日韩精品| 日韩午夜在线| 国产午夜久久av| 群体交乱之放荡娇妻一区二区| 在线成人直播| 日韩一区二区三区精品| 国产精品中文字幕亚洲欧美| 色婷婷综合网| 日韩制服丝袜先锋影音| 国产精品亚洲一区二区在线观看| 亚洲午夜精品久久久久久app| 在线国产日韩| 国产不卡精品| av不卡在线看| 国产午夜精品一区在线观看| 日韩啪啪电影网| 蜜臀av一区二区三区| 精品国产乱码久久久久久1区2匹| 成人av动漫在线观看| 欧美久久香蕉| 国产综合视频| 国产精品久久久久9999高清| 亚洲大片在线| 国产免费播放一区二区| 婷婷色综合网| 久久久精品国产**网站| 蜜臀国产一区二区三区在线播放| 高清一区二区三区| 视频在线观看一区二区三区| 欧美91在线| 欧美专区在线| 国产精品国产一区| 亚洲乱亚洲高清| 精品捆绑调教一区二区三区| 日韩激情精品| 不卡中文字幕| 国产一区二区三区四区五区 | 99国产精品免费视频观看| 日韩激情一区二区| 欧美三级网址| 欧美综合精品| 欧美精品一卡| 电影91久久久| 国产亚洲人成a在线v网站| 欧美日韩国产探花| 国产999精品在线观看| 亚洲精品字幕| 欧美午夜精品一区二区三区电影| 国产亚洲久久| 亚洲性视频在线| 欧美va天堂在线| 久久99高清| 奇米777国产一区国产二区| 好看的亚洲午夜视频在线| 精品国产亚洲一区二区三区大结局| 免费不卡在线观看| 欧美 日韩 国产一区二区在线视频| 国产精品久久久久久久久久白浆 | 欧美91视频| 日韩高清欧美| 国产精品久久久久久久久久齐齐| 蜜乳av另类精品一区二区| 日韩国产一区| 麻豆高清免费国产一区| 欧美日韩亚洲国产精品| 亚洲精品在线二区| 国产视频亚洲| 99久久九九| 五月激情久久| 色爱综合网欧美| 国产91在线播放精品| 麻豆精品视频在线| 国产伦精品一区二区三区视频| 蜜桃av一区二区三区电影| 99亚洲精品| 亚洲激情二区| 日韩视频一区二区三区在线播放免费观看 | 欧美日韩精品免费观看视频完整| 色网在线免费观看| 你懂的国产精品| 国产欧美三级| 国产欧美三级| 国产精品久一| 精品丝袜久久| 国产专区精品| 91视频一区| 五月激情久久| 久久在线免费| 国产免费成人| 亚洲丝袜啪啪| 日本视频一区二区| 日韩精品视频一区二区三区| 日韩和欧美一区二区| 欧美久久亚洲| 麻豆精品视频在线观看| 欧美丰满日韩| 麻豆精品蜜桃| 欧美.日韩.国产.一区.二区| 欧美特黄一级大片| 99riav1国产精品视频| 免费精品国产的网站免费观看| 国产综合欧美| 国产视频一区三区| 美国三级日本三级久久99 | 国产91在线精品| yellow在线观看网址| av高清一区| 久久中文字幕二区| 国产一区成人| 亚洲精品美女91| 国产精品一区二区美女视频免费看| 国产精品99精品一区二区三区∴| 久久只有精品| 色综合www| 国产视频亚洲| 欧美精品国产一区| 麻豆成人在线观看| 久久久久91| 日韩精品一级二级| 国产精品一区二区精品| 国产成人精品三级高清久久91| 成人羞羞在线观看网站| 亚洲免费影院| 国产欧美三级| 日韩不卡免费高清视频| 鲁大师成人一区二区三区| 日韩精品成人在线观看| 麻豆久久久久久久| 欧美国产91| 婷婷视频一区二区三区| 麻豆国产精品视频| 99精品国产一区二区三区| 亚洲色图综合| 麻豆免费精品视频| 极品裸体白嫩激情啪啪国产精品| 蜜臀a∨国产成人精品| 久久xxx视频| 香蕉久久99| 国产调教一区二区三区| 欧美精品资源| 日韩在线麻豆| 波多视频一区| 亚洲乱码视频| 日韩欧美精品一区| 亚洲欧美日本日韩| 国产精品任我爽爆在线播放 | 国产精品日韩精品中文字幕| 欧美影院三区| 国产精选久久| 欧美日韩四区| 欧美91在线| 老司机久久99久久精品播放免费| 国产精品二区影院| 尹人成人综合网| 精品五月天堂| 亚洲精品九九| 亚洲午夜一级| 国产精品久久久久久模特| 9久re热视频在线精品| 精品资源在线| 亚洲人成毛片在线播放女女| 四虎成人av| 欧美一区二区三区久久| 精品一区在线| 国际精品欧美精品|