您的位置:首页 > 编程语言 > Java开发

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

2019-02-18 16:55 148 查看

一、线程挂起与恢复

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

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

2、可以使用的方法:

    wait() 暂停执行、放弃已经获得的锁、进入等待状态
    notify() 随机唤醒一个在等待锁的线程
    notifyAll() 唤醒所有在等待锁的线程,自行抢占cpu资源

##在下面的测试代码中,大家要注意必须是同一个锁,且锁的对象必须一致,不然会报错

[code]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)自行定义一个标志,用来判断是否继续执行

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: