package com.freeflying.thread.communication;
/**
* 在wait时线程被interrupt
* @ClassName: InterruptMeetWait
* @Description:
* @author freeflying
* @date 2018年7月17日
*/
public class InterruptMeetWait {
public static void main(String[] args) {
try {
Object lock=new Object();
InterruptMeetWaitA interruptMeetWaitA=new InterruptMeetWaitA(lock);
interruptMeetWaitA.start();
Thread.sleep(1000);
interruptMeetWaitA.interrupt();
} catch (Exception e) {
}
}
}
class InterruptMeetWaitEx{
public void testMethod(Object lock) {
try {
synchronized (lock) {
System.out.println("begin wait!");
lock.wait();
System.out.println("end wait!");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
class InterruptMeetWaitA extends Thread{
private Object lock;
public InterruptMeetWaitA(Object lock) {
this.lock=lock;
}
@Override
public void run() {
InterruptMeetWaitEx interruptMeetWaitEx=new InterruptMeetWaitEx();
interruptMeetWaitEx.testMethod(lock);
}
}
结果:
begin wait!
java.lang.InterruptedException
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Unknown Source)
at com.freeflying.thread.communication.InterruptMeetWaitEx.testMethod(InterruptMeetWait.java:26)
at com.freeflying.thread.communication.InterruptMeetWaitA.run(InterruptMeetWait.java:42)