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

您的位置:首頁技術文章
文章詳情頁

Java util concurrent及基本線程原理簡介

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

一:什么是JUC

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

二:進程和線程的區別

進程是可并發執行的程序在某個數據集合上的一次計算活動,也是操作系統進行資源分配和調度的基本單位。

線程是進程的一個實體,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位.線程自己基本上不擁有系統資源,只擁有一點在運行中必不可少的資源(如程序計數器,一組寄存器和棧),但是它可與 同屬一個進程的其他的線程共享進程所擁有的全部資源。

并發:多線程、 多個線程操作一個資源類,快速交替過程。

并行:多核多CPU;

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

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

三:wait和sleep的區別

1:類層面

wait ------object

sleep-------Thread 誰調用誰睡覺

2:是否釋放鎖層面

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

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

3:使用范圍層面

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

sleep可以再任意的地方使用

4:異常

sleep必須捕獲異常

wait不需要捕獲異常

四:線程的幾種使用方式

1.優先級

public final void setPriority(int newPriority)

更改線程的優先級。

默認為5,最小為1,最大為10

設置了優先級別之后,級別高 并不是說你一定被優先調度,而是你的被優先調度的概率高而已。

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.線程強制運行:join()

可以通過join()方法使得一個線程強制運行,線程強制運行期間,其他線程無法運行,必須等待此線程完成之后,才可以繼續運行。

public final void join() throws InterruptedException

等待該線程終止。

public final void join(long millis)throws InterruptedException

等待該線程終止的時間最長為 millis 毫秒。超時為 0 意味著要一直等下去。

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

3 線程的休眠(sleep)

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

sleep定義格式:

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

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

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

控制當前線程休眠若干毫秒

* 1秒= 1000毫秒

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

package Thread1;class MyThread implements Runnable{ // 實現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() + '運行,i = ' + i) ; // 取得當前線程的名字 } }};public class demo1{ public static void main(String args[]){ MyThread mt = new MyThread() ; // 實例化Runnable子類對象 Thread t = new Thread(mt,'線程'); // 實例化Thread對象 t.start() ; // 啟動線程 }};

4.線程的禮讓(yield)

yield()方法實現線程的禮讓。

package Thread1;class MyThread implements Runnable{ // 實現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() + '運行,i = ' + i) ; // 取得當前線程的名字 if(i==2){System.out.print('線程禮讓:') ;Thread.currentThread().yield() ; // 首先獲取當前線程,然后線程禮讓 } } }};public class demo1{ public static void main(String args[]){ MyThread my = new MyThread() ; // 實例化MyThread對象 Thread t1 = new Thread(my,'線程A') ; Thread t2 = new Thread(my,'線程B') ; t1.start() ; t2.start() ; }};

5.判斷線程是否在執行:isAlive

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

6.當前線程:CurrentThread()

程序可以通過currentThread()方法取得當前正在運行的線程對象,

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

7.線程名稱

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

2,線程的名稱一般在啟動線程前設置,但也允許為運行的線程設置名稱,允許兩個Thread對象有相同名稱,但是應該避免。

3,如果程序沒有為線程指定名稱,系統會自動為線程設置名稱。

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

五:幾種方法的比較

Thread.sleep(long millis),一定是當前線程調用此方法,當前線程進入阻塞,但不釋放對象鎖,millis后線程自動蘇醒進入可運行狀態。作用:給其它線程執行機會的最佳方式。 Thread.yield(),一定是當前線程調用此方法,當前線程放棄獲取的cpu時間片,由運行狀態變會可運行狀態,讓OS再次選擇線程。作用:讓相同優先級的線程輪流執行,但并不保證一定會輪流執行。實際中無法保證yield()達到讓步目的,因為讓步的線程還有可能被線程調度程序再次選中。Thread.yield()不會導致阻塞。 t.join()/t.join(long millis),當前線程里調用其它線程1的join方法,當前線程阻塞,但不釋放對象鎖,直到線程1執行完畢或者millis時間到,當前線程進入可運行狀態。 obj.wait(),當前線程調用對象的wait()方法,當前線程釋放對象鎖,進入等待隊列。依靠notify()/notifyAll()喚醒或者wait(long timeout)timeout時間到自動喚醒。 obj.notify()喚醒在此對象監視器上等待的單個線程,選擇是任意性的。notifyAll()喚醒在此對象監視器上等待的所有線程。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
jizzjizz中国精品麻豆| 国产一区二区久久久久| 成人国产精品一区二区网站| 国产精品午夜一区二区三区| 国产精品xxx| 国产激情久久| 国产成人精品三级高清久久91| 国产一区二区三区91| 岛国av在线网站| 欧美久久一区二区三区| 国产精品三级| 精品成av人一区二区三区| 91综合网人人| 九九精品调教| 免费久久99精品国产自在现线| 噜噜噜久久亚洲精品国产品小说| 视频一区二区不卡| 欧美日韩一区自拍| 国产精品videosex极品| 成人一二三区| 日韩午夜av在线| 日韩在线黄色| 国产成人久久精品麻豆二区 | 99精品国产一区二区三区| 日韩在线免费| 国产精品毛片| 国产欧美久久一区二区三区| 久久福利在线| 亚洲国内欧美| 91精品啪在线观看国产爱臀| 精品国产乱码久久久久久1区2匹| a日韩av网址| 久久不射网站| 国产精品4hu.www| 国产一区二区三区不卡av| 欧美日韩国产高清电影| 亚洲欧美一级| 日韩成人免费| 亚洲制服一区| 国产一区调教| 一区二区电影在线观看| 成人影视亚洲图片在线| 美女被久久久| 亚洲黄色免费看| 中文不卡在线| av免费不卡国产观看| 亚洲aⅴ网站| 成人久久一区| 国产精品啊v在线| av资源新版天堂在线| 日韩在线观看一区二区| 97人人精品| 婷婷综合福利| 伊人精品一区| 精品视频亚洲| 日韩激情一二三区| 99久久九九| 精品中国亚洲| 日韩欧美精品一区二区综合视频| 99久久精品网| 美女尤物国产一区| 久久不射中文字幕| 国产美女高潮在线观看| 91午夜精品| 欧美亚洲精品在线| 麻豆一区二区99久久久久| 亚洲免费专区| aa国产精品| 精品一区av| 91精品日本| 久久香蕉精品| 91精品蜜臀一区二区三区在线| 国产精品久一| 欧美日韩午夜电影网| 在线国产日韩| 日韩专区在线视频| 狠狠色狠狠色综合日日tαg| 国产激情在线播放| 国产探花一区| 欧美一区二区三区高清视频| 日产精品一区二区| 国产精成人品2018| 亚洲18在线| 蜜臀a∨国产成人精品| 欧美亚洲精品在线| 久久久久久婷| 国产在视频一区二区三区吞精| 日本高清久久| 亚洲精品少妇| 中文一区一区三区免费在线观| 日韩视频中文| 亚洲欧美日韩综合国产aⅴ| 好吊日精品视频| 九一国产精品| 欧美羞羞视频| 日韩精品免费一区二区在线观看 | 日韩有吗在线观看| 中文一区一区三区免费在线观| 欧美在线亚洲| 一区在线免费观看| 激情综合网五月| 国内激情久久| 日韩午夜高潮| 亚洲日产av中文字幕| 亚洲视频二区| 91精品国产自产观看在线| 国产精品婷婷| 视频一区视频二区中文字幕| 伊人国产精品| 国产调教一区二区三区| 久久国际精品| 精品色999| 成人午夜精品| 香蕉精品视频在线观看| aⅴ色国产欧美| 四虎在线精品| 国产精品流白浆在线观看| 国产精品久久久久久久免费软件| 国产精品色在线网站| 精品国产一区二区三区噜噜噜| 极品av在线| 蜜桃视频在线网站| 欧美精品一区二区久久| 亚洲另类av| 国产激情久久| а√天堂中文在线资源8| 久久麻豆精品| 亚洲精品极品| 国产精品99一区二区三区| 久久久成人网| 在线看片日韩| 国产精品嫩模av在线| 精品国产免费人成网站| 99久久亚洲精品蜜臀| 尹人成人综合网| 国产日韩欧美一区二区三区在线观看| 国产欧美日韩视频在线| 在线中文字幕播放| 在线视频精品| 久久丁香四色| 亚洲黄色影院| 国产精品日韩精品在线播放| 日韩不卡视频在线观看| 久色成人在线| 色爱综合网欧美| 蜜臀久久99精品久久久画质超高清| 国产精品一区高清| 亚洲网站视频| 国产欧美另类| 欧美日韩在线网站| 国产一卡不卡| 日韩欧美三级| 中文字幕免费精品| 国产99在线| 日韩成人午夜精品| 神马日本精品| 久久精品99国产精品日本| 日韩另类视频| 国产毛片久久久| 亚洲男女av一区二区| 欧美日韩一区二区三区不卡视频| 成人三级高清视频在线看| 亚洲狼人精品一区二区三区| 日韩免费小视频| 欧美精品中文字幕亚洲专区| 激情久久中文字幕| 国产午夜精品一区在线观看| 欧美成人国产| 精品国产麻豆| 日韩不卡手机在线v区| 日韩不卡免费高清视频| 欧美片第1页综合| 亚洲制服少妇| 91tv亚洲精品香蕉国产一区| 国产精品xvideos88| 亚洲综合三区| 夜鲁夜鲁夜鲁视频在线播放| 国产乱子精品一区二区在线观看 | 精品欧美久久| 成人精品动漫一区二区三区| 日韩视频一区二区三区在线播放免费观看| 国产欧美久久一区二区三区| 三级在线观看一区二区 | 久久影院午夜精品| 欧美日韩1区| 免费视频一区二区| 99久久亚洲精品蜜臀| 97国产精品| 另类欧美日韩国产在线| 日韩av一区二| 在线精品一区二区| 怡红院精品视频在线观看极品| 成人羞羞在线观看网站| 欧美日韩一区二区国产| 免费观看日韩电影| 在线国产一区二区| 久久久9色精品国产一区二区三区| 精品欧美视频| 国产精品s色| 国产精品亚洲欧美日韩一区在线|