线程的中断

package seven;

import common.Utils;

/**
 * 
 * 线程的阻塞
 * 引起线程阻塞的方法有 sleep() wait(),join(会造成当前线程的阻塞,而前面两个会造成调用线程的阻塞)
 *  当线程阻塞时,会进行阻塞队列,当有一个线程向阻塞线程发出中断请求时,被请求线程会在合理时刻对请求
 * 进行处理,如果被请求的线程处于阻塞状态,则其会抛出 InterruptedException ,然后执行 catch()语句块
 * 被请求线程会再次进入 runnable 队列等待 JVM的调度
 * 
 */
public class Blocking {
    static final Object lock = new Object();

    public static void main(String args[]) {
	final Thread main = Thread.currentThread();
	Thread reader = new Thread() {
	    @Override
	    public void run() {
		synchronized(lock) {
		    try {
			lock.wait();	//会使得这个线程从等待集合中被移除,
					//使得它可以在再次获得锁之后,继续执行java.lang.InterruptedException异常的处理逻辑。
					//所以并不是它中断后就执行异常里面的代码,而是其线程放入到就绪队列中,等待再次调入,然后执行异常
		    }catch(InterruptedException e) {
			System.out.println(Thread.currentThread().getName()+" 被中断");
		    }
		}
	    }
	};
	reader.start();
	System.out.println("1s latter...");
	Utils.sleep(1);
	System.out.println(Thread.currentThread().getName()+" 向  reader 发送中断请求");
	reader.interrupt(); // 主线程向 reader 发送了一个中断请求
	
    }
}

你可能感兴趣的:(JOIN,jvm,thread,String,object,Class)