本文共 2096 字,大约阅读时间需要 6 分钟。
package com.demo.Interruput;/** * @author xiaobu * @version JDK1.8.0_171 * @date on 2019/9/25 17:36 * @description 说明:park和wait的区别。wait让线程阻塞前,必须通过synchronized获取同步锁。 */public class WaitTest { public static void main(String[] args) { ThreadA threadA = new ThreadA("A"); synchronized (threadA){ try { System.out.println(Thread.currentThread().getName() + " start"); threadA.start(); System.out.println(Thread.currentThread().getName() + " block"); threadA.wait(); System.out.println(Thread.currentThread().getName() + " continue"); } catch (InterruptedException e) { e.printStackTrace(); } } } static class ThreadA extends Thread{ public ThreadA(){ } public ThreadA(String name){ super(name); } @Override public void run() { synchronized (this){ System.out.println("通知notify"); notify(); } } }}
package com.demo.Interruput;import java.util.concurrent.locks.LockSupport;/** * @author xiaobu * @version JDK1.8.0_171 * @date on 2019/9/25 17:36 * @description */public class LockSupportTest { private static Thread mainThread; public static void main(String[] args) { ThreadA threadA = new ThreadA("A"); mainThread = Thread.currentThread(); System.out.println(Thread.currentThread().getName() + " start"); threadA.start(); System.out.println(Thread.currentThread().getName() + " block"); LockSupport.park(mainThread); System.out.println(Thread.currentThread().getName() + " continue"); } static class ThreadA extends Thread { public ThreadA() { } public ThreadA(String name) { super(name); } @Override public void run() { System.out.println(Thread.currentThread().getName() + " wakeup others"); LockSupport.unpark(mainThread); } }}
转载地址:http://mgrai.baihongyu.com/