6個狀態定義:java.lang.Thread.Statejava
Thread thread1 = new Thread(new Runnable() { @Override public void run() { System.out.println("thread1當前狀態:" + Thread.currentThread().getState().toString()); System.out.println("thread1 執行了"); } }); System.out.println("沒調用start方法,thread1當前狀態:" + thread1.getState().toString()); thread1.start(); Thread.sleep(2000L); // 等待thread1執行結束,再看狀態 System.out.println("等待兩秒,再看thread1當前狀態:" + thread1.getState().toString());
Thread thread2 = new Thread(new Runnable() { @Override public void run() { try {// 將線程2移動到等待狀態,1500後自動喚醒 Thread.sleep(1500); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("thread2當前狀態:" + Thread.currentThread().getState().toString()); System.out.println("thread2 執行了"); } }); System.out.println("沒調用start方法,thread2當前狀態:" + thread2.getState().toString()); thread2.start(); System.out.println("調用start方法,thread2當前狀態:" + thread2.getState().toString()); Thread.sleep(200L); // 等待200毫秒,再看狀態 System.out.println("等待200毫秒,再看thread2當前狀態:" + thread2.getState().toString()); Thread.sleep(3000L); // 再等待3秒,讓thread2執行完畢,再看狀態 System.out.println("等待3秒,再看thread2當前狀態:" + thread2.getState().toString());
Thread thread3 = new Thread(new Runnable() { @Override public void run() { synchronized (Demo2.class) { System.out.println("thread3當前狀態:" + Thread.currentThread().getState().toString()); System.out.println("thread3 執行了"); } } }); synchronized (Demo2.class) { System.out.println("沒調用start方法,thread3當前狀態:" + thread3.getState().toString()); thread3.start(); System.out.println("調用start方法,thread3當前狀態:" + thread3.getState().toString()); Thread.sleep(200L); // 等待200毫秒,再看狀態 System.out.println("等待200毫秒,再看thread3當前狀態:" + thread3.getState().toString()); } Thread.sleep(3000L); // 再等待3秒,讓thread3執行完畢,再看狀態 System.out.println("等待3秒,讓thread3搶到鎖,再看thread3當前狀態:" + thread3.getState().toString());