一、sleep() 与 wait()
两者都会让当前线程进入等待状态。唤醒后都需要等待 CPU 资源,不一定会立即执行。若在等待期间被调用此线程的的 interrupt() 方法,将会产生 InterruptedException 异常。
wait() 是 Object 类的方法,会释放对象锁,并让出 CPU 资源。只能在 synchronized 下使用,使用 notify() 或 notiftAll() 唤醒。
// 线程工厂,这里主要用来设置线程名字 ThreadFactory namedThreadFactory = new ThreadFactoryBuilder().setNameFormat("demo-pool-%d").build(); // 创建线程池 ThreadPoolExecutor threadPool = new ThreadPoolExecutor(6, 6, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>(1024), namedThreadFactory, new ThreadPoolExecutor.AbortPolicy()); Object object = new Object(); threadPool.execute(() -> { try { synchronized (object) { object.wait(); System.out.println("AAAAAAAAAAAAAAAAAAAAAAAAAAA"); } } catch (InterruptedException e) { e.printStackTrace(); } }); threadPool.execute(() -> { synchronized (object) { System.out.println("BBBBBBBBBBBBBBBBBBBBBBBBBBB"); object.notify(); } });