約玩原始碼中執行緒的呈現狀態,死鎖程式碼如何寫?
執行緒狀態
Thread thread = new Thread() { @Override public void run() { System.out.println(Thread.currentThread().getName()); }};// 只宣告不呼叫start()方法,得到的狀態是NEWSystem.out.println(thread.getState()); // NEW
Thread thread = new Thread() { @Override public void run() { System.out.println(Thread.currentThread().getName()); }};thread.start();System.out.println(thread.getState()); // RUNNABLE
public class MyCounter { int counter; public synchronized void increase() { counter++; try { Thread.sleep(10*1000); } catch (InterruptedException e) { e.printStackTrace(); } }}
MyCounter myCounter = new MyCounter();// 執行緒1呼叫同步執行緒,模擬阻塞new Thread(()-> myCounter.increase()).start();// 執行緒2繼續呼叫同步阻塞方法Thread thread = new Thread(()-> myCounter.increase());thread.start();// 讓主執行緒等10毫秒Thread.currentThread().sleep(10);// 列印執行緒2,為阻塞狀態:BLOCKEDSystem.out.println(thread.getState());
public class MyThread extends Thread{ @Override public void run() { synchronized (MyThread.class){ try { MyThread.class.wait(); System.out.println(Thread.currentThread().getName()); } catch (InterruptedException e) { e.printStackTrace(); } } }}
Thread thread = new Thread(new MyThread());thread.start();// 主執行緒掛起200毫秒,等thread執行完成Thread.sleep(200);// 輸出WAITING,執行緒thread一直處於被掛起狀態System.out.println(thread.getState());
synchronized (MyThread.class) { MyThread.class.notify();}
TIMED_WAITING狀態,只需要給wait設定上時間即可,程式碼如下:public class MyThread extends Thread{ @Override public void run() { synchronized (MyThread.class){ try { MyThread.class.wait(1000); System.out.println(Thread.currentThread().getName()); } catch (InterruptedException e) { e.printStackTrace(); } } }}
Thread thread = new Thread(new MyThread());thread.start();// 主執行緒掛起200毫秒,等thread執行完成Thread.sleep(200);// 輸出TIMED_WAITINGSystem.out.println(thread.getState());synchronized (MyThread.class) { MyThread.class.notify();}
Thread thread = new Thread(()-> System.out.println(Thread.currentThread().getName()));thread.start();// 讓主執行緒等10毫秒Thread.currentThread().sleep(10);System.out.println(thread.getState());
死鎖
static Object object1 = new Object();static Object object2 = new Object();public static void main(String[] args) { Thread thread = new Thread(){ @Override public void run() { synchronized (object1){ try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (object2){ System.out.println(Thread.currentThread().getName()); } } } }; Thread thread2 = new Thread(){ @Override public void run() { synchronized (object2){ try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (object1){ System.out.println(Thread.currentThread().getName()); } } } }; thread.start(); thread2.start();
總結
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69996194/viewspace-2846037/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 執行緒中的死鎖執行緒
- JavaSE_多執行緒入門 執行緒安全 死鎖 狀態 通訊 執行緒池Java執行緒
- 執行緒狀態和鎖執行緒
- 詳解Java執行緒池的ctl(執行緒池控制狀態)【原始碼分析】Java執行緒原始碼
- Java 原始碼刨析 - 執行緒的狀態有哪些?它是如何工作的?Java原始碼執行緒
- java執行緒的狀態+鎖分析Java執行緒
- 【Java】【多執行緒】同步方法和同步程式碼塊、死鎖Java執行緒
- Java的六種執行緒狀態及程式碼示例Java執行緒
- 如何處理執行緒死鎖執行緒
- 如何寫一段死鎖程式碼
- Java執行緒狀態及同步鎖Java執行緒
- 實現手機直播原始碼中兩個執行緒依次執行的相關程式碼原始碼執行緒
- PHP 互斥鎖:如何確保程式碼的執行緒安全?PHP執行緒
- Linux雜談:程式鎖核+實時執行緒導致的讀寫鎖死迴圈Linux執行緒
- 多執行緒程式是如何執行程式碼的?執行緒行程
- 執行緒狀態執行緒
- 玩轉java多執行緒 之多執行緒基礎 執行緒狀態 及執行緒停止實戰Java執行緒
- Java多執行緒(五):死鎖Java執行緒
- java多執行緒(5)死鎖Java執行緒
- Java多執行緒-執行緒狀態Java執行緒
- 執行緒池的實現程式碼分析執行緒
- Java執行緒的狀態Java執行緒
- 作業系統複習(程式、執行緒、死鎖)作業系統執行緒
- 如何使用jstack分析執行緒狀態JS執行緒
- 死鎖避免中的安全狀態和不安全狀態
- 執行緒池原始碼探究執行緒原始碼
- 執行緒池原始碼分析執行緒原始碼
- Netty原始碼死磕一(netty執行緒模型及EventLoop機制)Netty原始碼執行緒模型OOP
- ThreadPollExcutor執行緒池的狀態thread執行緒
- 多執行緒程式設計-分析阻塞佇列的原始碼實現執行緒程式設計佇列原始碼
- 多執行緒的執行緒狀態及相關操作執行緒
- java多執行緒中的死鎖、活鎖、飢餓、無鎖都是什麼鬼?Java執行緒
- java 執行緒淺解03[執行緒同步以及經典死鎖]Java執行緒
- 執行緒池執行模型原始碼全解析執行緒模型原始碼
- JDK執行緒池原始碼研究JDK執行緒原始碼
- 減少程式碼中該死的 if else 巢狀巢狀
- 從原始碼的角度解析執行緒池執行原理原始碼執行緒
- 【Java】執行緒的 6 種狀態Java執行緒