java并发编程基础--线程的挂起、恢复及中断操作

一、线程挂起与恢复

1、在久的JDK版本中,提供了下面两个方法,但目前已经废弃了,Thread源码中都加了@Deprecated注解

thread.suspend() 该方法不会释放线程所占用的资源。如果使用该方法将某个线程挂起,则可能会使其他等待资源的线程死锁
thread.resume() 方法本身并无问题,但是不能独立于suspend()方法存在

2、可以使用的方法:

    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();
            } 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();
        }

    }
}

结果如右,随机唤醒了一个线程

二、线程中断

1)stop() ,是废弃方法,开发中不要使用。因为一调用,线程就立刻停止,此时有可能引发相应的线程安全性问题


2)调用Thread.interrupt方法


3)自行定义一个标志,用来判断是否继续执行

扫描二维码关注公众号,回复: 5453788 查看本文章

猜你喜欢

转载自blog.csdn.net/qq_38966361/article/details/87628251
今日推荐