-
setPriority(int newPriority):更改线程的优先级
-
static void sleep(long millis):在指定的毫秒数内让当前正在执行的线程休眠
-
void join():等待该线程终止
-
static void yield:暂停当前正在执行的线程对象,并执行其他线程
-
void interrupt():终端线程,不建议使用这个方式!
-
boolean isAlive():测试线程是否处于活动状态
停止线程
-
不推荐使用JDK提供的stop()、destroy()方法。【已废弃】
-
推荐线程自己停止下来
-
建议使用一个标志位进行终止变量,当flag=false,则终止线程运行
package oop.state; //测试stop //1.建议线程正常停止-->利用次数,不建议死循环 //2.建议使用标志位-->设置一个标志位 //3.不要使用stop或者destroy等过时或者JDK不建议使用的方法 public class TestStop implements Runnable { //1.设置一个标志位 private boolean flag = true; @Override public void run() { int i = 0; while (flag){ System.out.println("run....Thread"+i++); } } //2.设置一个公开的方法停止线程,转换标志位 public void stop(){ this.flag = false; } public static void main(String[] args) { TestStop testStop = new TestStop(); new Thread(testStop).start(); for (int i = 0; i < 1000; i++) { System.out.println("main"+i); if (i==900){ //调用stop方法切换标志位,让线程停止 testStop.stop(); System.out.println("线程该停止了"); } } } }
线程休眠
-
sleep(时间)指定当前线程阻塞的毫秒数(1000=一秒)
-
sleep存在异常interruptedException
-
sleep时间达到后线程进入就绪状态
-
sleep可以模拟网络延时,倒计时等
-
每一个对象都有一个锁,sleep不会释放锁
package oop.state; //模拟网络延时:放大问题的发生性 public class TestSleep implements Runnable{ //票数 private int ticketNums = 10; @Override public void run() { while(true){ if (ticketNums<=0){ break; } //模拟延时 try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName()+"-->拿到了第"+ticketNums--+"张票"); } } public static void main(String[] args) { TestSleep ticket = new TestSleep(); new Thread(ticket,"小a").start(); new Thread(ticket,"小b").start(); new Thread(ticket,"小c").start(); } }
package oop.state; import java.text.SimpleDateFormat; import java.util.Date; //模拟倒计时 public class TestSleep2 { public static void main(String[] args) { try { tenDown(); } catch (InterruptedException e) { e.printStackTrace(); } Date startTime = new Date(System.currentTimeMillis());//获取系统当前时间 while(true){ try { Thread.sleep(1000); System.out.println(new SimpleDateFormat("HH:mm:ss").format(startTime)); startTime = new Date(System.currentTimeMillis());//更新当前时间 } catch (InterruptedException e) { e.printStackTrace(); } } } public static void tenDown() throws InterruptedException { int num = 10; while (true){ Thread.sleep(1000); System.out.println(num--); if (num<=0){ break; } } } }
搜索
复制
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/280042.html