美文网首页程序员
使用Condition控制线程按照顺序执行

使用Condition控制线程按照顺序执行

作者: 蜗牛会跑步 | 来源:发表于2018-07-26 11:33 被阅读20次

使用Condition对象可以对线程执行的顺序进行排序规划:

package Lock.condition123;

import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.ReentrantLock;

public class Run {
   volatile private static int nextPrintWho = 1;
   private static ReentrantLock lock = new ReentrantLock();
   final private static Condition conditionA = lock.newCondition();
   final private static Condition conditionB = lock.newCondition();
   final private static Condition conditionC = lock.newCondition();

   public static void main(String[] args) {
       Thread ThreadA = new Thread() {
           @Override
           public void run() {
               try {
                   lock.lock();
                   while (nextPrintWho != 1) {
                       conditionA.await();
                   }
                   System.out.println("A:执行了");
                   nextPrintWho = 2;
                   conditionB.signalAll();
               } catch (InterruptedException e) {
                   e.printStackTrace();
               } finally {
                   lock.unlock();
               }
           }
       };
       Thread ThreadB = new Thread() {
           @Override
           public void run() {
               try {
                   lock.lock();
                   while (nextPrintWho != 2) {
                       conditionA.await();
                   }
                   System.out.println("B:执行了");
                   nextPrintWho = 3;
                   conditionC.signalAll();
               } catch (InterruptedException e) {
                   e.printStackTrace();
               } finally {
                   lock.unlock();
               }
           }
       };
       Thread ThreadC = new Thread() {
           @Override
           public void run() {
               try {
                   lock.lock();
                   while (nextPrintWho != 3) {//条件
                       conditionA.await();
                   }
                   System.out.println("C:执行了");
                   nextPrintWho = 1;
                   conditionA.signalAll();
               } catch (InterruptedException e) {
                   e.printStackTrace();
               } finally {
                   lock.unlock();//释放锁
               }
           }
       };
       new Thread(ThreadA).start();
       new Thread(ThreadB).start();
       new Thread(ThreadC).start();
   }
}

执行的结果:

A:执行了
B:执行了
C:执行了

相关文章

  • 使用Condition控制线程按照顺序执行

    使用Condition对象可以对线程执行的顺序进行排序规划: 执行的结果:

  • 多线程交替顺序执行

    多线程交替顺序执行 1.知识补充 1.1Condition 控制线程通信 1.2面试题 1.3解决方法 在这里,我...

  • Java多线程 -- 05 线程通信

    导读目录: 传统的线程通信 使用Condition控制线程通信 使用阻塞队列(BlockingQueue)控制线程...

  • 使用Condition实现顺序执行

  • 线程基础

    线程与进程 线程:进程中负责程序执行的执行单元,线程本身依靠程序进行运行,线程是程序中的顺序控制流,只能使用分配给...

  • Race Condition vs Data Race

    Race Condition(竞争条件):多个线程访问共享的数据。共享数据最终的结果取决于线程的执行顺序。Data...

  • 线程 -- join 功能

    由于多线程的执行是无序的,因此使用 join 对控制多个线程的执行顺序非常关键。 举个例子: def T1_job...

  • iOS 多线程-CGD

    串行队列同步执行,不开启新线程,任务按顺序执行 串行队列异步执行,会开启新线程(1个),任务按照顺序执行 并行队列...

  • java多线程干货(一)

    线程与进程 1 线程:进程中负责程序执行的执行单元线程本身依靠程序进行运行线程是程序中的顺序控制流,只能使用分配给...

  • Java多线程基础

    线程与进程 线程:进程中负责程序执行的执行单元 线程本身依靠程序进行运行线程是程序中的顺序控制流,只能使用分配给程...

网友评论

    本文标题:使用Condition控制线程按照顺序执行

    本文链接:https://www.haomeiwen.com/subject/klavmftx.html