Java Thread.interrupt方法
2016-10-13 11:27
337 查看
Java Thread.interrupt方法
1、Thread.interrupt()方法Thread.interrupt()方法不会终止一个正在运行的线程,只是发出一个阻塞状态,调用Thread.interruped()和isInterrupted()方法可以判断。
public class ThreadInterrup { public static void main(String[] args) { try { ThreadA threadA = new ThreadA(); threadA.start(); Thread.sleep(100); threadA.interrupt(); System.out.println("In Thread main threadA.isInterrupted() = " + threadA.isInterrupted()); Thread.sleep(100); System.out.println("In Thread main setPause at " + System.currentTimeMillis()); threadA.setPause(true); } catch (InterruptedException e) { e.printStackTrace(); } } static class ThreadA extends Thread { private volatile boolean pause; public void run() { while(!pause) { } System.out.println("In ThreadA end at " + System.currentTimeMillis()); } public void setPause(boolean pause) { this.pause = pause; } } }
虽然调用了Thread.interrupt(),但线程并没有停止。必须调用其他方式才能停止。
In Thread main threadA.isInterrupted() = true In Thread main setPause at 1489726867303 In ThreadA end at 1489726867303
2、Thread.interrupt()和wait()方法
如果线程正在等待状态或者即将进入等待状态,都会引发异常。
public class ThreadInterrupWait { public static void main(String[] args) { try { Object lock = new Object(); ThreadA threadA = new ThreadA(lock); threadA.start(); Thread.sleep(100); threadA.interrupt(); Thread.sleep(100); ThreadB threadB = new ThreadB(lock); threadB.start(); Thread.sleep(100); threadB.interrupt(); } catch (InterruptedException e) { e.printStackTrace(); } } static class ThreadA extends Thread { private Object lock; public ThreadA(Object lock) { this.lock = lock; } public void run() { synchronized (lock) { try { lock.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println("In ThreadA end at " + System.currentTimeMillis()); } } static class ThreadB extends Thread { private Object lock; public ThreadB(Object lock) { this.lock = lock; } public void run() { synchronized (lock) { try { Thread.sleep(1000); lock.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println("In ThreadB end at " + System.currentTimeMillis()); } } }
3、Thread.interrupt()和Thread.sleep()方法
如果线程正在睡眠状态或者即将进入睡眠状态,都会引发异常。
public class ThreadInterrupSleep { public static void main(String[] args) { try { ThreadA threadA = new ThreadA(); threadA.start(); Thread.sleep(1000); threadA.interrupt(); Thread.sleep(1000); ThreadB threadB = new ThreadB(); threadB.start(); Thread.sleep(1000); threadB.interrupt(); threadB.setPause(true); } catch (InterruptedException e) { e.printStackTrace(); } } static class ThreadA extends Thread { public void run() { try { Thread.sleep(10000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("In ThreadA end at " + System.currentTimeMillis()); } } static class ThreadB extends Thread { private volatile boolean pause; public void run() { while (!pause) { } try { Thread.sleep(10000); } catch (InterruptedException e) { e.printStackTrace(); } } public void setPause(boolean pause) { this.pause = pause; } } }
相关文章推荐
- Java中Thread的interrupt()方法
- java Thread interrupt方法
- Java中的线程Thread方法之---interrupt()
- think in java笔记: Thread的interrupt()方法
- Java中的线程Thread方法之---interrupt()
- Java中的线程Thread方法之---interrupt()
- Java中的线程Thread方法之---interrupt()
- Java Thread的interrupt方法详解
- Java并发08:Thread的基本方法(5)-interrupt()、isInterrupted()
- java线程基础巩固---Thread中断Interrupt方法学习&采用优雅的方式结束线程生命周期
- Java中的线程Thread方法之---interrupt()
- Java线程之interrupt终止线程,Thread中的主要方法(五)
- Java中的线程Thread方法之---interrupt()
- Java中的线程Thread方法之---interrupt()
- Java Thread Join方法
- java 三种多线程的创建方法Thread,Handler,Runnable
- Android Thread interrupt 中断JAVA线程
- java中Thread类中的start()方法与run()方法
- java 三种多线程的创建方法Thread,Handler,Runnable
- [Java] Thread 创建线程的第二种方法