美文网首页
多线程-Thread常见方法

多线程-Thread常见方法

作者: 无力韬韬 | 来源:发表于2020-11-24 21:23 被阅读0次

Sleep

sleep()方法是Thread类提供的静态方法,在哪个线程中调用,哪个线程阻塞,一般用于模拟网络延时和用于倒计时。时间到了之后自动进入就绪状态。
利用sleep方法实现倒计时效果。

public class CountDown  {
    public static void main(String[] args) throws InterruptedException {
       int time=10;
        while (true)
        {
            Thread.sleep(1000);
            if(time==0)
            {
                System.out.println("来辣来辣来辣!!!");
                break;
            }
            System.out.println(time--);
        }
    }

}

Thread.Sleep(0)的作用,就是“触发操作系统立刻重新进行一次CPU竞争”。竞争的结果也许是当前线程仍然获得CPU控制权,也许会换成别的线程获得CPU控制权。
代码示例

/**
 * yield方法礼让测试
 * @author 无力韬韬
 */
public class YieldDemo implements Runnable {
    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName()+"==>Start");
        try {
            Thread.sleep(0);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(Thread.currentThread().getName()+"==>End");
    }
    public static void main(String[] args) {
        YieldDemo yieldDemo1=new YieldDemo();
        YieldDemo yieldDemo2=new YieldDemo();
        new Thread(yieldDemo1,"小明").start();
        new Thread(yieldDemo2,"小红").start();
    }
}
CPU还是分配给了小红
CPU给了小明

Yield

yield()方法也是Thread类提供的静态方法,改线程使用yield方法,直接由运行状态重回就绪状态,和sleep(0)作用一样。
代码示例

/**
 * yield方法礼让测试
 * @author 无力韬韬 
 */
public class YieldDemo implements Runnable {
    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName()+"==>Start");
        Thread.yield();
        System.out.println(Thread.currentThread().getName()+"==>End");
    }
    public static void main(String[] args) {
        YieldDemo yieldDemo1=new YieldDemo();
        YieldDemo yieldDemo2=new YieldDemo();
        new Thread(yieldDemo1,"小明").start();
        new Thread(yieldDemo2,"小红").start();
    }
}
小明礼让之后小红分配了CPU
小明礼让之后还是分配给了小明

Join

join()方法是一个成员方法,不能通过Thread类直接调用。
代码示例

/**
 * @author 无力韬韬 
 */
public class JoinDemo {
    public static void main(String[] args) throws InterruptedException {
        Roober roober=new Roober();
        Thread thread=new Thread(roober);
        thread.start();
        for (int i=10;i>0;i--)
        {
            System.out.println("前面还有"+i+"个人");
            if (i==4)
            {
                thread.join();
            }
        }
    }
}
class Roober implements Runnable
{
    @Override
    public void run() {
        for (int i=10;i>0;i--)
        {
            System.out.println("小R前面还有"+i+"个人");
        }
    }
}

主线程中调用了 thread.join()方法,主线程被阻塞,thread线程运行。


结果 注释掉join方法之后

相关文章

网友评论

      本文标题:多线程-Thread常见方法

      本文链接:https://www.haomeiwen.com/subject/jhsjsktx.html