1、java的线程挂起合唤醒
wait notify
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();
}
}
2、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会阻塞当前线程,是目标线程执行完成后在通知当前线程继续执行;