外部终止线程及阻塞
Posted ssxblog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了外部终止线程及阻塞相关的知识,希望对你有一定的参考价值。
一、外部终止线程
1)线程类中 定义 线程体使用的标识
2)线程体使用该标志
3)对外提供方法,改变标识
4)外部干涉,根据条件终止线程
package cn.thread; public class Demo01 public static void main(String[] args) Study s=new Study(); Thread t=new Thread(s); t.start(); //外部干涉,根据条件终止线程 for(int i=0;i<100;i++) if(i==50) s.stop(); System.out.println("线程停止"+i); class Study implements Runnable //1)线程类中 定义 线程体使用的标识 private boolean flag=true; @Override public void run() //2)线程体使用该标志 while(flag) System.out.println("start ....Thread"); //3)对外提供方法,改变标识 public void stop() this.flag=false;
二、阻塞线程
1、join :合并线程
2、yield:暂停自己的线程 static
3、sleep
join实现 (条件成立时,会执行当前线程,从而使主线程停滞,线程执行完后,再执行主线程,从而达到阻塞目的)
JoinDemo01.java
package cn.thread; /* * join 合并线程 */ public class JoinDemo01 extends Thread public static void main(String[] args) throws InterruptedException JoinDemo01 demo=new JoinDemo01(); Thread t=new Thread(demo); //新生 t.start(); //就绪 //cpu调度 运行 for(int i=0;i<100;i++) if(i==50) t.join(); //main 阻塞。。。 System.out.println("main...."+i); @Override public void run() for(int i=0;i<100;i++) System.out.println("join...."+i);
yield实现 (yield()方法放在哪就阻塞谁,如果放在主线程里就阻塞主线程,等其他线程运行完,再执行主线程)
YieldDemo01.java
package cn.thread; public class YieldDemo01 extends Thread public static void main(String[] args) YieldDemo01 y=new YieldDemo01(); Thread t=new Thread(y); y.start(); for(int i=0;i<100;i++) if(i%20==0) //暂停本线程 main t.yield(); System.out.println("main... "+i); @Override public void run() for(int i=0;i<100;i++) System.out.println("Yield... "+i);
sleep模拟倒计时
SleepDemo01.java
package cn.thread; import java.text.SimpleDateFormat; import java.util.Date; /* * 倒计时 * 1、倒数10个数,一秒钟打印一个 * 2、倒计时 */ public class SleepDemo01 public static void main(String[] args) throws InterruptedException Date endtime=new Date(System.currentTimeMillis()+10*1000); long end=endtime.getTime(); while(true) //输出 System.out.println(new SimpleDateFormat("mm:ss").format(endtime)); //format格式化为字符串 //构建下一秒的时间 endtime=new Date(endtime.getTime()-1000); Thread.sleep(1000); //十秒以内 继续 否则退出 if(end-10000>endtime.getTime()) break; public static void test01() throws InterruptedException int num=10; while(true) System.out.println(num); Thread.sleep(1000); num--; if(num<0) break;
效果
以上是关于外部终止线程及阻塞的主要内容,如果未能解决你的问题,请参考以下文章