千家信息网

JAVA多线程使用Lock,Condition实现A,B,C,D依次执行,怎么实现排它,同步通讯

发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,这篇文章主要介绍"JAVA多线程使用Lock,Condition实现A,B,C,D依次执行,怎么实现排它,同步通讯",在日常操作中,相信很多人在JAVA多线程使用Lock,Condition实现A,B
千家信息网最后更新 2025年02月01日JAVA多线程使用Lock,Condition实现A,B,C,D依次执行,怎么实现排它,同步通讯

这篇文章主要介绍"JAVA多线程使用Lock,Condition实现A,B,C,D依次执行,怎么实现排它,同步通讯",在日常操作中,相信很多人在JAVA多线程使用Lock,Condition实现A,B,C,D依次执行,怎么实现排它,同步通讯问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"JAVA多线程使用Lock,Condition实现A,B,C,D依次执行,怎么实现排它,同步通讯"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

package com.study;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;public class BlockingQueueDemo {  public static void main(String[] args) {    BlockingQueueDemo blockingQueueDemo = new BlockingQueueDemo();    final BlockingQueueClass blockingQueueClass = blockingQueueDemo.new BlockingQueueClass();    Thread thread = new Thread(new Runnable() {      @Override      public void run() {        while (true) {          blockingQueueClass.invokeA();        }      }    });    thread.start();    Thread thread2 = new Thread(new Runnable() {      @Override      public void run() {        while (true) {          blockingQueueClass.invokeB();        }      }    });    thread2.start();        Thread thread3 = new Thread(new Runnable() {      @Override      public void run() {        while (true) {          blockingQueueClass.invokeC();        }      }    });    thread3.start();        Thread thread4 = new Thread(new Runnable() {      @Override      public void run() {        while (true) {          blockingQueueClass.invokeD();        }      }    });    thread4.start();  }  class BlockingQueueClass {    Lock lock = new ReentrantLock();    Condition conditionA = lock.newCondition();    Condition conditionB = lock.newCondition();    Condition conditionC = lock.newCondition();    Condition conditionD = lock.newCondition();    boolean syncA = true;    boolean syncB = false;    boolean syncC = false;    boolean syncD = false;    public void invokeA() {      lock.lock();      try {        while (!syncA) {          try {            conditionA.await();          } catch (InterruptedException e) {            e.printStackTrace();          }        }        syncA = false;        syncB = true;        System.out.println("invoke A....");        conditionB.signal();      } catch (Exception e) {        e.printStackTrace();      } finally {        lock.unlock();      }    }        public void invokeB() {      lock.lock();      try {        while (!syncB) {          try {            conditionB.await();          } catch (InterruptedException e) {            e.printStackTrace();          }        }        syncB = false;        syncC = true;        System.out.println("invoke B....");        conditionC.signal();      } catch (Exception e) {        e.printStackTrace();      } finally {        lock.unlock();      }    }        public void invokeC() {      lock.lock();      try {        while (!syncC) {          try {            conditionC.await();          } catch (InterruptedException e) {            e.printStackTrace();          }        }        syncC = false;        syncD = true;        System.out.println("invoke C....");        conditionD.signal();      } catch (Exception e) {        e.printStackTrace();      } finally {        lock.unlock();      }    }    public void invokeD() {      lock.lock();      try {        while (!syncD) {          try {            conditionD.await();          } catch (InterruptedException e) {            e.printStackTrace();          }        }        syncD = false;        syncA = true;        System.out.println("invoke D....");        conditionA.signal();      } catch (Exception e) {        e.printStackTrace();      } finally {        lock.unlock();      }    }  }}

到此,关于"JAVA多线程使用Lock,Condition实现A,B,C,D依次执行,怎么实现排它,同步通讯"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

0