如何让正在运行的线程暂停一段时间
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何让正在运行的线程暂停一段时间相关的知识,希望对你有一定的参考价值。
可以使用Thread类的Sleep()方法让线程暂停一段时间。需要注意的是,这并不会让线程终止,一旦从休眠中唤醒线程,线程的状态将会被改变为Runnable,并且根据线程调度,它将得到执行。
可以使用thread.wait()方法来让线程暂停一段时间,wait方法里面填写的是暂停的时间的长度,一毫秒为单位,
在java中有以下3种方法可以终止正在运行的线程:
使用退出标志,使线程正常退出,也就是当run方法完成后线程终止。
使用stop方法强行终止,但是不推荐这个方法,因为stop和suspend及resume一样都是过期作废的方法。
使用interrupt方法中断线程。 参考技术B 可以使用Thread类的Sleep()方法让线程暂停一段时间。需要注意的是,这并不会让线程终止,一旦从休眠中唤醒线程,线程的状态将会被改变为Runnable,并且根据线程调度,它将得到执行。 可以使用thread.wait()方法来让线程暂停一段时间,wait方法...本回答被提问者采纳
Java线程休眠和线程让步
线程休眠:我们希望人为地控制线程,使得正在执行的线程暂停,将CPU让给别的线程,我们可以使用静态方法sleep(long millis),该方法可以让当前正在执行的线程暂停一段时间,进入休眠等待状态。
线程让步:线程让步可以通过yield() 方法来实现,该方法和sleep()有点相似,都可以让当前正在运行的线程暂停,区别在于yield()方法不会阻塞该线程,他只是将线程转换成就绪状态,让系统调度器重新调度一次。当某个线程调用yield()方法之后,只有与当前线程优先级相同或者更高的线程才能获得执行的机会。
线程休眠简单实例:
public class ThreadSleep { public static void main(String[] args) { new Thread(new SleepThread()).start(); for(int i=1;i<=10;i++) { if(i == 5) { System.out.println("mainThread start sleep!"); try { Thread.sleep(20000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } System.out.println("mainThread is inputting:"+i); try { Thread.sleep(500); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } class SleepThread implements Runnable { @Override public void run() { // TODO Auto-generated method stub for (int i = 0; i < 10; i++) { if (i == 3) { System.out.println("deputyThread start sleep!"); try { Thread.sleep(5000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } System.out.println("deputyThread is inputting:"+i); try { Thread.sleep(500); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
线程让步简单实例:
public class ThreadYield { public static void main(String[] args) { new Thread(new YieldThread(),"Thread A").start(); new Thread(new YieldThread(),"Thread B").start(); new Thread(new YieldThread(),"Thread C").start(); new Thread(new YieldThread(),"Thread E").start(); new Thread(new YieldThread(),"Thread F").start(); new Thread(new YieldThread(),"Thread G").start(); new Thread(new YieldThread(),"Thread H").start(); } } class YieldThread implements Runnable{ @Override public void run() { // TODO Auto-generated method stub for(int i = 0;i <=10;i++) { if(i == 4) { System.out.println(Thread.currentThread().getName()+" that is inputting "+i+" has yielded!"); continue; } System.out.println(Thread.currentThread().getName()+" is inputting :"+i); } } }
以上是关于如何让正在运行的线程暂停一段时间的主要内容,如果未能解决你的问题,请参考以下文章