package ch14; public class MyThread13 extends Thread { @Override public void run() { super.run(); for (int i=0;i<10000;i++) { System.out.println("i="+(i+1)); } } }
package ch14; public class Test17 { public static void main(String[] args) { try { MyThread13 thread=new MyThread13(); //创建MyThread13线程类实例 thread.start(); //启动线程 Thread.sleep(100); //延时100毫秒 thread.interrupt(); //停止线程 } catch(InterruptedException e) { System.out.println("main catch"); e.printStackTrace(); } } }
i=1 i=2 ... i=9999 i=10000
this.interrupted()
:测试当前线程是否已经中断。this.islnterrupted()
:测试线程是否已经中断。package ch14; public class MyThread14 extends Thread { @Override public void run() { super.run(); for(int i=0;i<10000;i++) { System.out.println("i="+(i+1)); } } }
package ch14; public class Test18 { public static void main(String[] args) { try { MyThread14 thread=new MyThread14(); thread.start(); //启动线程 Thread.sleep(100); //延时100毫秒 thread.interrupt(); //停止线程 //Thread.currentThread().interrupt(); System.out.println("是否停止1?="+thread.interrupted()); System.out.println("是否停止2?="+thread.interrupted()); } catch(InterruptedException e) { System.out.println("main catch"); e.printStackTrace(); } System.out.println("end!"); } }
i=1 i=2 ... i=9999 i=10000 是否停止1?=false 是否停止2?=false end!
thread.interrupt();
System.out.println("是否停止 1 ? ="+thread.interrupted()); System.out.println("是否停止 2 ? ="+thread.interrupted());
public static void main(String[] args) { Thread.currentThread().interrupt(); System.out.println(" 是否停止 1 ? ="+Thread.interrupted()); System.out.println(" 是否停止 2 ? ="+Thread.interrupted()); System.out.println("end!"); }
是否停止 1 ? =true 是否停止 2 ? =false end!
public boolean isInterrupted()
package ch14; public class Test18 { public static void main(String[] args) { try { MyThread14 thread=new MyThread14(); thread.start(); Thread.sleep(100); thread.interrupt(); System.out.println("是否停止1?="+thread.isInterrupted()); System.out.println("是否停止2?="+thread.isInterrupted()); } catch(InterruptedException e) { System.out.println("main catch"); e.printStackTrace(); } System.out.println("end!"); } }
i=498 是否停止1?=true i=499 是否俜止2?=true i=500 end! i=501 i=502
package ch14; public class MyThread15 extends Thread { @Override public void run() { super.run(); for(int i=0;i<500000;i++) { if(this.interrupted()) { //如果当前线程处于停止状态 System.out.println("已经是停止状态了!我要退出了!"); break; } System.out.println("i="+(i+1)); } } }
package ch14; public class Test19 { public static void main(String[] args) { try { MyThread15 thread=new MyThread15(); thread.start(); //启动线程 Thread.sleep(2000); //延时2000毫秒 thread.interrupt(); //停止线程 } catch(InterruptedException e) { //捕捉线程停止异常 System.out.println("main catch"); e.printStackTrace(); } System.out.println("end!"); //主线程结束时输出 } }
...... i=271597 i=271598 已经是停止状态了!我要退出了! end!
public void run() { super.run(); for(int i=0;i<500000;i++) { if(this.interrupted()) { System.out.println("已经是停止状态了!我要退出了!"); break; } System.out.println("i="+(i+1)); } System.out.println("我被输出,如果此代码是for又继续运行,线程并未停止!"); }
...... i=233702 i=233703 end! 已经是停止状态了!我要退出了! 我被输出,如果此代码是for又继续运行,线程并未停止!
public void run() { super.run(); try { for(int i=0;i<500000;i++) { if(this.interrupted()) { System.out.println("已经是停止状态了!我要退出了!"); throw new InterruptedException(); } System.out.println("i=" + (i + 1)); } System.out.println("我在for下面"); } catch(InterruptedException e) { System.out.println("进MyThread15.java类run方法中的catch了!"); e.printStackTrace(); } }
...... i=251711 i=251712 i=251713 已经是停止状态了!我要退出了! end! 进MyThread15.java类run方法中的catch了! java.lang.InterruptedException at text.MyThread.run(MyThread.java:16)
package ch14; public class MyThread16 extends Thread { @Override public void run() { super.run(); try { System.out.println("run begin"); Thread.sleep(200000); System.out.println("run end"); } catch(InterruptedException e) { System.out.println("在休眠中被停止!进入catch!"+this.isInterrupted()); e.printStackTrace(); } } }
package ch14; public class Test20 { public static void main(String[] args) { try { MyThread16 thread=new MyThread16(); thread.start(); Thread.sleep(200); thread.interrupt(); } catch(InterruptedException e) { System.out.println("main catch"); e.printStackTrace(); } System.out.println("end!"); } }
run begin end! 在休眠中被停止!进入catch!false java.lang.InterruptedException: sleep interrupted at java.lang.Thread.sleep(Native Method) at text.MyThread.run(MyThread.java:12)
package ch14; public class MyThread17 extends Thread { @Override public void run() { super.run(); try { for(int i=0;i<1000;i++) { System.out.println("i="+(i+1)); } System.out.println("run begin"); Thread.sleep(200); System.out.println("run end"); } catch(InterruptedException e) { System.out.println("先停止,再遇到了sleep!进入catch!"); e.printStackTrace(); } } }
package ch14; public class Test21 { public static void main(String[] args) { MyThread17 thread=new MyThread17(); thread.start(); thread.interrupt(); System.out.println("end!"); } }
end! i=1 i=2 i=3 i=4 i=5 i=6 ......
...... i=999 i=1000 run begin 先停止,再遇到了sleep!进入catch! java.lang.InterruptedException: sleep interrupted at java.lang.Thread.sleep(Native Method) at text.MyThread.run(MyThread.java:16)
package ch14; public class MyThread18 extends Thread { private int i=0; @Override public void run() { try { while (true) { i++; System.out.println("i=" + i); Thread.sleep(1000); } } catch(InterruptedException e) { //TODO Auto-generated catch block e.printStackTrace(); } } }
package ch14; public class Test22 { @SuppressWarnings("deprecation") public static void main(String[] args) { try { MyThread18 thread=new MyThread18(); thread.start(); Thread.sleep(8000); thread.stop(); } catch(InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
i=1 i=2 i=3 i=4 i=5 i=6 i=7 i=8 i=9
package ch14; public class SynchronizedObject { private String username="root"; private String password="root"; public String getUsername() { return username; } public void setUsername(String username) { this.username=username; } public String getPassword() { return password; } public void setPassword(String password) { this.password=password; } synchronized public void printString(String username,String password) { try { this.username=username; Thread.sleep(100000); this.password=password; } catch(InterruptedException e) { e.printStackTrace(); } } }
package ch14; public class MyThread19 extends Thread { private SynchronizedObject object; public MyThread19(SynchronizedObject object) { super(); this.object=object; } @Override public void run() { object.printString("admin","123456"); } }
package ch14; public class Test23 { public static void main(String[] args) { try { SynchronizedObject object=new SynchronizedObject(); MyThread19 thread=new MyThread19(object); thread.start(); Thread.sleep(500); thread.stop(); System.out.println("用户名:"+object.getUsername()); System.out.println("密码:"+object.getPassword()); } catch(InterruptedException e) { e.printStackTrace(); } } }
用户名:admin 密码:root
package ch14; public class MyThread20 extends Thread { @Override public void run() { while (true) { if (this.isInterrupted()) { System.out.println("停止了!"); return; } System.out.println("timer="+System.currentTimeMillis()); } } }
package ch14; public class Test24 { public static void main(String[] args) throws InterruptedException { MyThread20 t=new MyThread20(); t.start(); Thread.sleep(2000); t.interrupt(); } }
...... timer=1540977194784 timer=1540977194784 timer=1540977194784 timer=1540977194784 timer=1540977194784 停止了!
本文链接:http://task.lmcjl.com/news/14010.html