Java线程休眠和线程让步

Posted outxiao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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);
		}
		
		
	}
	
}

 

以上是关于Java线程休眠和线程让步的主要内容,如果未能解决你的问题,请参考以下文章

Java多线程编程总结

JAVA基础——多线程

java 线程的让步

Java多线程系列--“基础篇”06之 线程让步

java多线程--线程让步

Java多线程系列---“基础篇”06之 线程让步