我是靠谱客的博主 苗条蜜蜂,最近开发中收集的这篇文章主要介绍java线程的休眠(sleep)、礼让(yield)、插队(join),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

线程休眠sleep的用法

步骤
(1)实现现场类
(2)调用sleep()方法即可使得线程休眠
实例代码如下:
下面的例子是,用sleep实现一个倒计时,每隔一秒,就会输出倒计时数字;
需要注意的是,调用sleep会抛出一个异常,需要捕捉异常处理

package opreation;
//使用sleep实现倒计时
public class TestSleep implements Runnable {
	
	public void run() {
		for (int i = 10; i >0; i--) {
			System.out.println(i);
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
	}
	
	public static void main(String args[]) {
		TestSleep t1Sleep=new TestSleep();
		new Thread(t1Sleep).start();
	}
	
}

线程礼让(yield)的用法

线程的执行是由CPu调度来决定的,因此,使用yield方法进行yield,可以使得其他线程和当前的线程重新竞争CPU资源;需要注意的是,此方法只是提供一个线程和当前线程重新开始竞争的机会,并不会代表每一次都能够礼让成功,最后还是看CPU选择;
下面例子作为示例
线程礼让不一定成功,需要cpu调度来决定是否阻塞当前线程运行
如果同一个线程打印开启,马上打印结束,说明没有阻塞;如果打印开启后,接着开启了另外一个线程,这说明成功礼让成功

package opreation;

import java.nio.channels.NonWritableChannelException;
import java.util.jar.Attributes.Name;

//测试线程礼让

public class TestyYield implements Runnable{
	public void run() {
		System.out.println(Thread.currentThread().getName()+"开启");
		Thread.yield();
		System.out.println(Thread.currentThread().getName()+"结束");
	}
	
	public static void main(String args[]) {
		TestyYield t1=new TestyYield();
		new Thread(t1,"test1").start();
		new Thread(t1,"test2").start();
	}
}

运行结果–礼让失败
在这里插入图片描述
运行结果–礼让成功
在这里插入图片描述

线程插队(join)

线程插队和礼让相反。线程插队允许当前线程阻塞,然后运行目标线程;
下面使用主线程和子线程演示线程插队用法

在主线程main方法中,做了一个循环,但i=50的时候,强行把t1线程插队,然后cpu会一一直运行t1线程的任务,直到t1运行停止,才会放开对main主线程的阻塞,继续运行主线程任务。

package opreation;
//测试主线程与其他线程的阻塞
public class TestMainYield implements Runnable{
	public void run() {
		for (int i = 0; i < 1000; i++) {
			
			System.out.println("子线程运行"+i);
		}
	}
	
	public static void main(String args[]) throws InterruptedException {
		TestMainYield t1=new TestMainYield();
		Thread aThread=new Thread(t1);
		aThread.start();
		for (int i = 0; i < 100; i++) {
			if(i==50) {
				aThread.join();//子线程插队,运行停止后,主线程才能停止阻塞,继续运行接下来的任务;
			}
			
			System.out.println("主线程运行"+i);
		}
		
	}
}

运行结果如下
在这里插入图片描述
在这里插入图片描述

最后

以上就是苗条蜜蜂为你收集整理的java线程的休眠(sleep)、礼让(yield)、插队(join)的全部内容,希望文章能够帮你解决java线程的休眠(sleep)、礼让(yield)、插队(join)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(75)

评论列表共有 0 条评论

立即
投稿
返回
顶部