美文网首页并发编程
三、线程的挂起与唤醒

三、线程的挂起与唤醒

作者: liyc712 | 来源:发表于2020-08-31 09:26 被阅读0次

    线程的挂起与唤醒

    一、使用object

    • wait() 暂停执行、放弃已经获得的锁、进入等待状态
    • notify() 随机唤醒一个在等待锁的线程
    • notifyAll() 唤醒所有在等待锁的线程,自行抢占cpu资源
    public class WaitDemo implements Runnable {
    
        private static Object waitObj = new Object();
    
        @Override
        public void run() {
            //持有资源
            synchronized (waitObj) {
                System.out.println(Thread.currentThread().getName()+"占用资源");
                try {
                    waitObj.wait();// 调用wait会释放资源
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            System.out.println(Thread.currentThread().getName()+"释放资源");
        }
    
        public static void main(String[] args) throws InterruptedException {
            Thread thread = new Thread(new WaitDemo(),"对比线程");
            thread.start();
    
            Thread thread2 = new Thread(new WaitDemo(),"对比线程2");
            thread2.start();
            Thread.sleep(3000L);
    
            synchronized (waitObj) {
                waitObj.notify();
            }
    
        }
    }
    

    二、被废弃的方法

    • thread.suspend() 该方法不会释放线程所占用的资源。如果使用该方法将某个线程挂起,则可能会使其他等待资源的线程死锁
    • thread.resume() 方法本身并无问题,但是不能独立于suspend()方法存在
    /**
     * 挂起操作的Demo
     */
    public class SuspendDemo implements Runnable {
    
        @Override
        public void run() {
            System.out.println(Thread.currentThread().getName()+"执行run方法,准备调用suspend方法");
            //挂起线程
            Thread.currentThread().suspend();// 挂起线程不会释放资源,容易死锁
            System.out.println(Thread.currentThread().getName()+"执行run方法,调用suspend方法结束");
    
        }
    
        public static void main(String[] args) throws InterruptedException {
            Thread thread = new Thread(new SuspendDemo());
            thread.start();
            Thread.sleep(3000L);
            //对线程进行唤醒操作
            thread.resume();
        }
    }
    

    相关文章

      网友评论

        本文标题:三、线程的挂起与唤醒

        本文链接:https://www.haomeiwen.com/subject/juxusktx.html