问题:线程对象每次都是新new的,unpark已经消亡的线程之后,下一次新new的线程再park就锁不住了
线程类
public class Item extends Thread {
@Override
public void run() {
System.err.println(Thread.currentThread().getName() + "【Item线程】"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date())+" 线程开始--------------------1秒后准备暂停");
try {
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
System.err.println(Thread.currentThread().getName() + "【Item线程】"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date())+" 暂停");
LockSupport.park();//暂停
System.err.println(Thread.currentThread().getName() + "【Item线程】"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date())+" park结束");
System.err.println(Thread.currentThread().getName() + "【Item线程】"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date())+" 线程开始消亡");
}
}
测试类
public class test01 {
public static void main(String[] args) throws InterruptedException {
System.out.println("park和unpark的测试,每次都是new的新线程");
System.out.println();
for (int i = 1; i <= 3; i++) {
if (i == 1) {
System.out.println("第1次测试:先park,后unpark");
} else if (i == 2) {
System.out.println("第2次测试:先unpark,后park,再unpark");
} else {
System.out.println("第3次测试:先park,后unpark");
}
System.out.println(" "+Thread.currentThread().getName() + "【main线程】" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date()) + " 开始测试--------------------5秒后准备解除暂停");
Item item = new Item();
item.start();
if (i == 2) {
System.out.println(" "+Thread.currentThread().getName() + "【main线程】" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date()) + " 提前unpark");
LockSupport.unpark(item);
}
Thread.sleep(5000);//测试过程5秒
LockSupport.unpark(item);//颁发证书,解除暂停
System.out.println(" "+Thread.currentThread().getName() + "【main线程】" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date()) + " 解除暂停");
Thread.sleep(2000);//跟下一次测试拉开时间距离,也让Item线程打印完
System.out.println("--------------------------------------------------------------");
System.out.println();
}
}
}
结果
线程对象每次都是新new的,第三次的时候,为啥锁不住了呢?