一、java的線程掛起合喚醒java
wait notifyide
public class Main { public static Object monitor = new Object(); public static class ThreadTest1 extends Thread{ @Override public void run() { synchronized (monitor) { System.err.println( ThreadTest1.currentThread().getName() + "-" + System.currentTimeMillis() + "begin run......" ); try { monitor.wait(); } catch (InterruptedException e) { e.printStackTrace(); } System.err.println(ThreadTest1.currentThread().getName() + "-" + System.currentTimeMillis() + "ater notify begin run......"); } } } public static class ThreadTest2 extends Thread{ @Override public void run() { synchronized (monitor) { System.err.println( ThreadTest1.currentThread().getName() + "-" + System.currentTimeMillis() + "begin run......" ); monitor.notify(); System.err.println(ThreadTest2.currentThread().getName() + "-" + System.currentTimeMillis() + "notify wating thread......"); } } } public static void main(String[] args){ ThreadTest1 threadTest1 = new ThreadTest1(); ThreadTest2 threadTest2 = new ThreadTest2(); threadTest1.start(); threadTest2.start(); } }
二、join線程
public static int i = 0; public static class ThreadTest extends Thread{ @Override public void run() { for (;i<1000000;i++); } } public static void main(String[] args) throws InterruptedException { Thread thread = new ThreadTest(); thread.start(); thread.join(); System.err.println("current i:"+i); }
join會阻塞當前線程,是目標線程執行完成後在通知當前線程繼續執行;code