約玩原始碼中執行緒的呈現狀態,死鎖程式碼如何寫?
執行緒狀態
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 原始碼刨析 - 執行緒的狀態有哪些?它是如何工作的?Java原始碼執行緒
- 詳解Java執行緒池的ctl(執行緒池控制狀態)【原始碼分析】Java執行緒原始碼
- java執行緒的狀態+鎖分析Java執行緒
- Java 實現執行緒死鎖Java執行緒
- 如何處理執行緒死鎖執行緒
- Java執行緒面試題(02) Java執行緒中如何避免死鎖Java執行緒面試題
- 如何寫一段死鎖程式碼
- 【Java】【多執行緒】同步方法和同步程式碼塊、死鎖Java執行緒
- Java的六種執行緒狀態及程式碼示例Java執行緒
- Java執行緒狀態及同步鎖Java執行緒
- 實現手機直播原始碼中兩個執行緒依次執行的相關程式碼原始碼執行緒
- GCD&&執行緒死鎖GC執行緒
- GCD 之執行緒死鎖GC執行緒
- Java多執行緒-死鎖的出現和解決Java執行緒
- 執行緒6--執行緒的狀態執行緒
- 執行緒狀態執行緒
- 玩轉java多執行緒 之多執行緒基礎 執行緒狀態 及執行緒停止實戰Java執行緒
- Java多執行緒(五):死鎖Java執行緒
- java多執行緒(5)死鎖Java執行緒
- Java多執行緒7:死鎖Java執行緒
- 多執行緒程式是如何執行程式碼的?執行緒行程
- Java多執行緒-執行緒狀態Java執行緒
- Java執行緒的狀態Java執行緒
- Linux雜談:程式鎖核+實時執行緒導致的讀寫鎖死迴圈Linux執行緒
- 作業系統複習(程式、執行緒、死鎖)作業系統執行緒
- 執行緒池的實現程式碼分析執行緒
- Java執行緒池中執行緒的狀態簡介Java執行緒
- 執行緒池原始碼探究執行緒原始碼
- 執行緒池原始碼分析執行緒原始碼
- 如何使用jstack分析執行緒狀態JS執行緒
- 如何使用 jstack 分析執行緒狀態JS執行緒
- Android 原始碼分析(三)安卓中的執行緒Android原始碼安卓執行緒
- 執行緒的幾種狀態執行緒
- java多執行緒中的死鎖、活鎖、飢餓、無鎖都是什麼鬼?Java執行緒
- Java在不同執行緒中執行程式碼Java執行緒行程