美文网首页
多线程-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