多线程—顺序控制

场景:两个线程的输出顺序需要固定。

synchronized实现:

//使得输出顺序是t1-->t2的固定顺序   打印:首先-->然后
@Slf4j
public class ThreadSo {
    //创建锁的对象
    static final Object object = new Object();
    //创建标记
    static Boolean mark = false;
    public static void main(String[] args) {
        Thread t1 = new Thread(()->{
            //线程t1先获取锁,打印【首先】,然后更改mark标记,最后唤醒等待队列里面的线程t2
            synchronized (object){
                log.debug("首先");
                mark = true;
                object.notify();
            }
        });
        Thread t2 = new Thread(()->{
            synchronized (object){
                //获取到对象锁之后 ,判断!mark是否为假,如果为假,就输出t2
                while(!mark){
                    try {
                        object.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                log.debug("然后");
            }
        });
        t2.start();
        t1.start();
    }
}

park&unpark实现:

@Slf4j
public class ThreadSo {
    //创建锁的对象
    static final Object object = new Object();
    //创建标记
    static Boolean mark = false;
    public static void main(String[] args) {
        Thread t1 = new Thread(()->{
            //休息
            LockSupport.park();
            log.debug("然后");
        });
        Thread t2 = new Thread(()->{
            log.debug("首先");
            //恢复
            LockSupport.unpark(t1);
        });
        t2.start();
        t1.start();
    }
}

おすすめ

転載: blog.csdn.net/qq_42251944/article/details/120891739