Fork me on GitHub

Sleep_Yield_Join

名称解释

Sleep:意思就是睡眠,当前线程暂停一段时间让给别的线程去运行;Sleep是怎么复活的?由你的睡眠时间而定,等睡眠到规定的时间自动复活。

Yield:就是当前线程正在执行的时候停止下来进入等待队列(就绪状态,CPU依然有可能把这个线程拿出来运行),回到等待队列里在系统的调度算法里头呢还是依然有可能把你刚回去的这个线程拿回来继续执行,当然,更大的可能性是把原来等待的那些拿出一个来执行,所以yield的意思是我让出一下CPU,后面你们能不能抢到那我不管。

join:意思就是在自己当前线程加入你调用Join的线程(),本线程等待。等调用的线程运行完了,自己再去执行。t1和t2两个线程,在t1的某个点上调用了t2.join,它会跑到t2去运行,t1等待t2运行完毕继续t1运行(自己join自己没有意义)。

代码

Sleep

 public void sleepDemo() {
        new Thread(()->{
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }).start();
    }

Yield

public void yieldDemo(){
        new Thread(()->{
            for (int i = 0; i < 20; i++) {
                if (i/2==0){
                    Thread.yield();
                }
                System.out.println("A--->"+i);
            }
        }).start();

        new Thread(()->{
            for (int i = 0; i < 20; i++) {
                System.out.println("B--->"+i);
            }
        }).start();
    }

Join

public void joinDemo(){
        Thread t1=new Thread(()->{
            for (int i = 0; i < 20; i++) {
                System.out.println("t1--->"+i);
            }
        });
        t1.start();

       new Thread(()->{
            for (int i = 0; i < 20; i++) {
                if (i==3){
                    try {
                        t1.join();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                System.out.println("t2--->"+i);
            }
        }).start();
    }

Gitee地址

https://gitee.com/zhuayng/foundation-study/blob/develop/JavaBasis/JUC/src/main/java/com/yxkj/juc/c_000/Sleep_Yield_Join.java

posted @ 2020-03-27 20:33  晨度  阅读(2029)  评论(0编辑  收藏  举报