Java Thread.interrupt方法

来源:互联网 发布:世界营销网络地图 编辑:程序博客网 时间:2024/05/22 10:28

Java Thread.interrupt方法

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() = trueIn Thread main setPause at 1489726867303In ThreadA end at 1489726867303

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());}}}

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;}}}

0 0
原创粉丝点击