概述
线程休眠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)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复