标签:http text ima 执行 dem test 调度 sleep 字符串
一、外部终止线程
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; } } } }
效果
标签:http text ima 执行 dem test 调度 sleep 字符串
原文地址:https://www.cnblogs.com/ssxblog/p/11252082.html