锁的中断
别人的代码,那过来改改
package com.jdk.api.demo;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class LockDemo {
public static void main(String[] args){
/* Thread i2 = new Thread(new RunIt3());
i2.start();
i2.interrupt(); */
Thread i2 = new Thread(new Synn());
i2.start();
i2.interrupt();
}
}
// java.lang.InterruptedException: sleep interrupted
class Synn implements Runnable{
public synchronized void synn_method()
{
try {
Thread.sleep(1000000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void run() {
synn_method();
}
}
/**
* lockInterruptibly 与 lock比较区别在于
lockInterruptibly 优先考虑响应中断,而不是响应锁定的普通获取或重入获取
* @author aircoder
*
*/
class RunIt3 implements Runnable{
private static Lock lock = new ReentrantLock();
public void run(){
try{
//---------------------------------a
// lock.lock(); //代码永远不会结束
lock.lockInterruptibly(); //代码永远不会结束 在 i2.interrupt();
int i=0;
System.out.println(Thread.currentThread().getName() + " running");
// TimeUnit.SECONDS.sleep(20);
while(i==0){
}
lock.unlock();
System.out.println(Thread.currentThread().getName() + " finished");
}
catch (Exception e){
e.printStackTrace();
System.out.println(Thread.currentThread().getName() + " interrupted");
}
}
}