Condition(条件变量) 将 Object 监视器方法(wait、notify 和 notifyAll)分解成截然不同的对象,以便通过将这些对象与任意 Lock 实现组合使用,为每个对象提供多个等待 set(wait-set)。其中,Lock 替代了 synchronized 方法和语句的使用,Condition 替代了 Object 监视器方法的使用。
在condition中 用到的是 await() 和 singal
Condition 实例实质上被绑定到一个锁上。要为特定 Lock 实例获得 Condition 实例,请使用其 newCondition() 方法。
用 condition 实现三个线程的 交替执行!!!
public class ThreeThreadRunApp {
private static Lock lock = new ReentrantLock();
private static Condition condition1 = lock.newCondition();
private static Condition condition2 = lock.newCondition();
private static Condition condition3 = lock.newCondition();
private static Integer flag = 1;
public static void main(String[] args) throws Exception {
//老二执行
new Thread(new Runnable() {
@Override
public void run() {
lock.lock();
try {
while (true) {
while (flag != 2) {// 不是2号 执行
try {
condition2.await();// 则使自己等待
} catch (Exception e) {
e.printStackTrace();
}
}
// 执行 老二代码
for (int i = 0; i < 10; i++) {
System.out.println("---------老二执行 : " + i);
TimeUnit.MILLISECONDS.sleep(500);
}
// 执行完 通知老三执行
condition3.signal();
flag = 3;
}
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}
}).start();
// 老三线程
new Thread(new Runnable() {
@Override
public void run() {
lock.lock();
try {
while (true) {
while (flag != 3) {// 不是3号 执行
try {
condition3.await();// 则使自己等待
} catch (Exception e) {
e.printStackTrace();
}
}
// 执行 老3代码
for (int i = 0; i < 10; i++) {
System.out.println("---------------------老三执行 : "+ i);
TimeUnit.MILLISECONDS.sleep(500);
}
// 执行完 通知老大执行
condition1.signal();
flag = 1;
}
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}
}).start();
//老大执行
/**
* 这段代码 即老大执行的这段程序必须放在 thread1 thread2 的后面
* 因为在老大的代码中 有condition2.signal();
* 若是放在thread1前面的话 程序必不会执行 condition2.await();
* 所以会报错!
*/
lock.lock();
try {
while (true) {
while (flag != 1) {// 不是1号 执行
try {
condition1.await();// 则使自己等待
} catch (Exception e) {
e.printStackTrace();
}
}
// 执行 老大代码
for (int i = 0; i < 10; i++) {
System.out.println("-老大执行 : " + i);
TimeUnit.MILLISECONDS.sleep(500);
}
// 执行完 通知老二执行
flag = 2;
condition2.signal();
}
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}
分享到:
相关推荐
Java并发编程是Java开发中的重要领域,涉及到多线程、并发控制、同步机制等多个知识点。以下是对Java并发知识体系的详细解析。 首先,我们要理解并发的理论基础。并发是为了提高系统资源利用率和处理能力,让多个...
高并发编程第三阶段30讲 使用Condition实现一个多线程下的Producer-Consumer_.mp4 高并发编程第三阶段31讲 JDK8-StampedLock详细介绍-上_.mp4 高并发编程第三阶段32讲 JDK8-StampedLock详细介绍-下.mp4 高...
在Java编程领域,多线程并发是不可或缺的一部分,特别是在服务器端和高并发应用中。本文将深入探讨"Java并发编程-线程安全与基础构建模块"这一主题,旨在帮助开发者理解如何有效地处理并发问题,提高程序性能和稳定...
Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,多线程主要通过继承Thread类或实现Runnable接口来实现。本教程《Java多线程编程核心技术》将...
总之, BlockingQueue 是 Java 并发编程中不可或缺的一部分,它简化了多线程间的数据交换,保证了线程安全,提高了程序的并发性能。开发者可以根据实际需求选择不同类型的阻塞队列实现,以适应不同的并发场景。
总结,Java 多线程编程涉及到线程的创建、状态转换、同步、通信以及线程池的使用等多个方面,理解和掌握这些知识点对于编写高效、安全的多线程程序至关重要。通过合理运用多线程技术,可以提升程序的并发性能,优化...
在Java编程中,多线程是并发处理任务的关键技术,它允许程序同时执行多个不同的任务。生产者-消费者模式是一种经典的多线程设计模式,用于解决数据共享问题,尤其是在一个线程生产数据而另一个线程消费数据的情况下...
以上介绍了 Java 并发编程中几个重要的概念和技术,包括 `ReentrantLock`、`Condition`、`Semaphore`、`ReadWriteLock`、`CountDownLatch`、`CyclicBarrier` 和 `LockSupport`。这些技术为我们提供了丰富的并发控制...
并发编程是现代计算机科学中的核心主题,尤其是在Java这样的多线程语言中。Java提供的并发工具,如线程、同步机制、并发集合以及Executor框架,为开发高效、可靠的并发应用程序提供了强大的支持。以下是一些关键知识...
Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,多线程可以通过实现Runnable接口或继承Thread类来创建。下面我们将深入探讨Java多线程编程的...
Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的...通过阅读这本书,开发者可以深入理解Java多线程编程的核心概念,提升自己的编程能力,为应对复杂并发场景打下坚实基础。
Java多线程技术是Java语言中非常重要的一个组成部分,它允许程序设计者能够编写同时执行多任务的程序。本篇探讨由童艳华编写的《Java多线程技术探讨》中,虽然没有直接给出完整的源代码或者算法逻辑,但根据给出的...
Java中的`ReentrantLock`是Java并发包`java.util.concurrent.locks`中的一个高级锁机制,它是可重入的互斥锁,具有与`synchronized`关键字...在设计和实现多线程程序时,了解和正确使用`ReentrantLock`是非常重要的。
### Java多线程核心编程技术 #### 一、Java多线程基础 ##### 1.1 线程的概念 在计算机科学中,线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。在Java中,通过创建`...
### Java多线程编程总结 #### 一、Java线程:概念与原理 - **操作系统中线程和进程的概念** 当前的操作系统通常都是多任务操作系统,多线程是一种实现多任务的方式之一。在操作系统层面,进程指的是内存中运行的...
### Java 并发核心编程知识点解析 #### 一、Java并发概述 自Java诞生之初,其设计者就赋予了该语言强大的并发处理能力。Java语言内置了对线程和锁的支持,这...理解和掌握这些概念和技术是成功进行并发编程的关键。
由于提供的文件内容大部分与Java多线程编程核心技术并无直接关联,而是关于电子书资源的联系方式和说明,因此不能直接从这部分内容中生成关于Java多线程的知识点。但考虑到描述中提到了电子书的标题以及它涉及的主题...
本项目聚焦于使用Java的Socket进行多线程并发控制,并结合Hibernate ORM框架与MySQL数据库进行数据存储。下面将详细阐述这些技术及其应用。 首先,Java Socket是Java提供的用于实现网络上不同计算机间进程通信的...
在Java编程领域,并发编程是一项核心技能,尤其是在大型系统或分布式应用中,高效地处理多线程和并发操作是至关重要的。"Java并发编程与实践"文档深入剖析了这一主题,旨在帮助开发者理解和掌握如何在Java环境中有效...
通过阅读《Java-jdk10-最新最全多线程编程实战指南-核心篇》这本书,开发者不仅可以理解Java多线程编程的基础知识,还能掌握高级并发编程技巧,从而在实际项目中实现高性能、高并发的程序设计。对于Java开发者来说,...