多线程-让线程按顺序执行

/**
 * 同时启动三个线程,然后让这个三个线程有顺序的执行
 */
public class MyTest {
    static class MyTask {

        private static ReentrantLock r1 = new ReentrantLock();
        private static Condition conditionA = r1.newCondition();
        private static Condition conditionB = r1.newCondition();
        private static Condition conditionC = r1.newCondition();

        //启动多个线程,然后让每一个线程按照顺序执行
        public void execute(String flag) {
            r1.lock();
            try {
                for (int i = 1; i < 10; i++) {
                    if ("A".equals(flag)) {
                        System.out.println(Thread.currentThread().getName() + " - " + i);
                        conditionB.signal(); //线程B运行
                        conditionA.await();
                    }
                    if ("B".equals(flag)) {
                        System.out.println(Thread.currentThread().getName() + " - " + i);
                        conditionC.signal();
                        conditionB.await();
                    }
                    if ("C".equals(flag)) {
                        System.out.println(Thread.currentThread().getName() + " - " + i);
                        conditionA.signal();
                        conditionC.await();
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                r1.unlock();
            }
        }

        public static void main(String[] args) {
            final MyTask myTask = new MyTask();
            new Thread(new Runnable() {

                @Override
                public void run() {
                    myTask.execute("A");
                }
            }, "A").start();

            new Thread(new Runnable() {

                @Override
                public void run() {
                    myTask.execute("B");
                }
            }, "B").start();

            new Thread(new Runnable() {

                @Override
                public void run() {
                    myTask.execute("C");
                }
            }, "C").start();
        }
    }
}

猜你喜欢

转载自blog.csdn.net/wb_zjp283121/article/details/89398418