suspend:挂起线程
resume:继续执行
挂起一个线程相当于让这个线程停止执行。但是不会释放任何锁资源,所以其它任何线程想要访问的时候都会因此而受牵连,只有在使用resume操作之后被挂起的线程才继续执行
但如果resume在suspend之前,那么程序就一直卡那
所以这两个方法被废用了
//
//t1线程先开始,t2后开始
//t1先被挂起,所以t2就不能运行了
//但是t1又resume,所以t1结束
//t2获得锁,但是resume发生在suspend的前面
//所以t2一直没有resume
//所以程序一直运行
//当你在最后加上threadsleep时程序就会结束
public class BadSuspend {
public static Object u = new Object();
static ChangeObjectThread t1 = new ChangeObjectThread("t1");
static ChangeObjectThread t2 = new ChangeObjectThread("t2");
public static class ChangeObjectThread extends Thread {
public ChangeObjectThread(String name){
super.setName(name);
}
@Override
public void run(){
synchronized(u){
System.out.println("in "+getName());
Thread.currentThread().suspend();
}
}
}
public static void main(String[] args) throws InterruptedException{
t1.start();
Thread.sleep(100);
t2.start();
t1.resume();
//程序最后加上sleep
//Thread.sleep(100);
t2.resume();
t1.join();
t2.join();
}
}
suspend和resume
最新推荐文章于 2024-03-15 21:43:44 发布