这篇文章主要介绍“JAVA多线程使用Lock,Condition实现A,B,C,D依次执行,怎么实现排它,同步通讯”,在日常操作中,相信很多人在JAVA多线程使用Lock,Condition实现A,B,C,D依次执行,怎么实现排它,同步通讯问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JAVA多线程使用Lock,Condition实现A,B,C,D依次执行,怎么实现排它,同步通讯”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
成都创新互联公司是专业的吴堡网站建设公司,吴堡接单;提供网站设计、网站建设,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行吴堡网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
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依次执行,怎么实现排它,同步通讯”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!