天天看点

常见方法

多线程中常见的方法:

package juc_1;/*
 *@author wupeng
 *@time 2021/7/14-9:47

 */

public class T03_Sleep_Yield_Join {
    public static void main(String[] args) {
//        testSleep();  //每个一秒打印一个
//        testYield();   //等于10的时候互相让出
        testJoin();

    }

    /*
    Sleep,意思就是睡眠,当前线程暂停一段时间,让给别的线程去运行,Sleep多会复活,由睡眠时间定
     */
    static void testSleep() {
        new Thread(()->{
            for (int i = 0; i < 100; i++) {
                System.out.println("A"+i);
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }
    /*
    Yield,实际上就是让出一下CPU,当前线程退回到等到队列里面,等到下一次CPU空闲的时候,能继续回去执行。
    情况不太可控制
     */
    static void testYield() {
        new Thread(()->{
            for (int i = 0; i < 100; i++) {
                System.out.println("A"+i);
                if(i % 10==0) Thread.yield();
            }
        }).start();

        new Thread(()->{
            for (int i = 0; i < 100; i++) {
                System.out.println("----------------B"+i);
                if(i%10==0) Thread.yield();
            }
        }).start();
    }

    /*join,在当前线程中,加入别的线程,让别的线程运行完之后,再进行自己再接着运行。
    * */
    static void testJoin() {
        Thread t1 = new Thread(()->{
            for (int i = 0; i < 100; i++) {
                System.out.println("A"+i);
                try {
                    Thread.sleep(50);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });

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