<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
執行緒由生到死的完整過程:
當執行緒被建立並啟動以後,它既不是一啟動就進入了執行狀態,也不是一直處於執行狀態。線上程的生命週期中,有幾種狀態呢?在API中java.lang.Thread.State
這個列舉中給出了六種執行緒狀態:
執行緒狀態 | 導致狀態發生條件 |
---|---|
NEW(新建) | 執行緒剛被建立,但是並未啟動。還沒呼叫start方法。MyThread t = new MyThread只有執行緒物件,沒有執行緒特徵。 |
Runnable(可執行) | 執行緒可以在java虛擬機器器中執行的狀態,可能正在執行自己程式碼,也可能沒有,這取決於作業系統處理器。呼叫了t.start()方法 :就緒(經典教法) |
Blocked(鎖阻塞) | 當一個執行緒試圖獲取一個物件鎖,而該物件鎖被其他的執行緒持有,則該執行緒進入Blocked狀態;當該執行緒持有鎖時,該執行緒將變成Runnable狀態。 |
Waiting(無限等待) | 一個執行緒在等待另一個執行緒執行一個(喚醒)動作時,該執行緒進入Waiting狀態。進入這個狀態後是不能自動喚醒的,必須等待另一個執行緒呼叫notify或者notifyAll方法才能夠喚醒。 |
Timed Waiting(計時等待) | 同waiting狀態,有幾個方法有超時引數,呼叫他們將進入Timed Waiting狀態。這一狀態將一直保持到超時期滿或者接收到喚醒通知。帶有超時引數的常用方法有Thread.sleep 、Object.wait。 |
Teminated(被終止) | 因為run方法正常退出而死亡,或者因為沒有捕獲的異常終止了run方法而死亡。 |
狀態中有一個狀態叫做計時等待,可以通過Thread類的方法來進行演示。 public static void sleep(long time)
讓當前執行緒進入到睡眠狀態,到毫秒後自動醒來繼續執行
//主執行緒執行到sleep方法會休眠1秒後再繼續執行 public class Test{ public static void main(String[] args){ for(int i = 1;i<=5;i++){ Thread.sleep(1000); System.out.println(i) } } }
public void wait()
: 讓當前執行緒進入到等待狀態 此方法必須鎖物件呼叫。
public class Demo1_wait { public static void main(String[] args) throws InterruptedException { // 步驟1 : 子執行緒開啟,進入無限等待狀態, 沒有被喚醒,無法繼續執行. new Thread(() -> { try { System.out.println("begin wait ...."); synchronized ("") { "".wait(); } System.out.println("over"); } catch (Exception e) { } }).start(); }
public void notify()
: 喚醒當前鎖物件上等待狀態的執行緒 此方法必須鎖物件呼叫。
public class Demo2_notify { public static void main(String[] args) throws InterruptedException { // 步驟1 : 子執行緒開啟,進入無限等待狀態, 沒有被喚醒,無法繼續執行. new Thread(() -> { try { System.out.println("begin wait ...."); synchronized ("") { "".wait(); } System.out.println("over"); } catch (Exception e) { } }).start(); //步驟2: 加入如下程式碼後, 3秒後,會執行notify方法, 喚醒wait中執行緒. Thread.sleep(3000); new Thread(() -> { try { synchronized ("") { System.out.println("喚醒"); "".notify(); } } catch (Exception e) { } }).start(); } }
定義一個集合,包子鋪執行緒完成生產包子,包子新增到集合中;吃貨執行緒完成購買包子,包子從集合中移除。
public class BaoZiPu extends Thread{ private List<String> list ; public BaoZiPu(String name,ArrayList<String> list){ super(name); this.list = list; } @Override public void run() { int i = 0; while(true){ //list作為鎖物件 synchronized (list){ if(list.size()>0){ //存元素的執行緒進入到等待狀態 try { list.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } //如果執行緒沒進入到等待狀態 說明集合中沒有元素 //向集合中新增元素 list.add("包子"+i++); System.out.println(list); //集合中已經有元素了 喚醒獲取元素的執行緒 list.notify(); } } } } }
public class ChiHuo extends Thread { private List<String> list ; public ChiHuo(String name,ArrayList<String> list){ super(name); this.list = list; } @Override public void run() { //為了能看到效果 寫個死迴圈 while(true){ //由於使用的同一個集合 list作為鎖物件 synchronized (list){ //如果集合中沒有元素 獲取元素的執行緒進入到等待狀態 if(list.size()==0){ try { list.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } //如果集合中有元素 則獲取元素的執行緒獲取元素(刪除) list.remove(0); //列印集合 集合中沒有元素了 System.out.println(list); //集合中已經沒有元素 則喚醒新增元素的執行緒 向集合中新增元素 list.notify(); } } } } }
public class Demo { public static void main(String[] args) { //等待喚醒案例 List<String> list = new ArrayList<>(); // 建立執行緒物件 BaoZiPu bzp = new BaoZiPu("包子鋪",list); ChiHuo ch = new ChiHuo("吃貨",list); // 開啟執行緒 bzp.start(); ch.start(); } }
到此這篇關於Java並行程式設計之執行緒狀態介紹的文章就介紹到這了,更多相關Java 執行緒狀態內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45