jdk 官网对Condition的描述:
Condition 将 Object 监视器方法(wait
、notify
和 notifyAll
)分解成截然不同的对象,以便通过将这些对象与任意 Lock
实现组合使用,为每个对象提供多个等待 set (wait-set)。其中,Lock 替代了 synchronized 方法和语句的使用,Condition 替代了 Object 监视器方法的使用。
下面通过网上一道面试题看看Condition的应用:
启动三个线程,顺序打印ABC十次
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class PrintABC {
Lock lock = new ReentrantLock();
Condition aCdt = lock.newCondition();
Condition bCdt = lock.newCondition();
Condition cCdt = lock.newCondition();
int order = 0;
public static void main(String[] args) {
final PrintABC print = new PrintABC();
ExecutorService executorService = Executors.newFixedThreadPool(3);
for (int i = 0; i < 10; i++) {
executorService.execute(new Runnable() {
@Override
public void run() {
print.printA();
}
});
executorService.execute(new Runnable() {
@Override
public void run() {
print.printB();
}
});
executorService.execute(new Runnable() {
@Override
public void run() {
print.printC();
}
});
}
executorService.shutdown();
}
public void printA() {
try {
lock.lock();
while (order != 0) {
aCdt.await();
}
System.out.println("A");
order = 1;
bCdt.signal();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
lock.unlock();
}
}
public void printB() {
try {
lock.lock();
while (order != 1)
bCdt.await();
System.out.println("B");
order = 2;
cCdt.signal();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
lock.unlock();
}
}
public void printC() {
try {
lock.lock();
while (order != 2)
cCdt.await();
System.out.println("C");
order = 0;
aCdt.signal();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
lock.unlock();
}
}
}
分享到:
相关推荐
在编程领域,多线程是一种重要的并发执行机制,它允许程序同时执行多个任务,从而提高系统资源利用率和程序响应速度。E语言(可能是错误输入或者是某个特定编程环境或语言的简称)中的多线程功能也不例外。本文将...
在编程领域,多线程是一种常见且强大的技术,它允许应用程序同时执行多个任务,从而提高程序的效率和响应性。Delphi,作为一个流行的Object Pascal开发环境,提供了丰富的工具和库来支持多线程编程。本篇文章将深入...
在Linux系统下进行多线程编程是开发高效并发应用程序的关键技术之一。本文将深入探讨Linux环境中的多线程概念、创建与管理线程的方法、线程同步与通信机制,以及多线程编程中可能遇到的问题和解决策略。 一、多线程...
在C++编程中,多线程技术是一种强大的工具,它允许程序同时执行多个任务,从而提高了效率和响应性。以下是对“C++多线程编程的十个例子”的详细讲解,这些例子将帮助你在Windows环境下深入理解和应用多线程。 1. **...
在计算机编程中,多线程是一种并发执行任务的技术,它允许多个子任务在同一时间运行,从而提高了程序的效率和响应性。这个“多线程例子”演示了如何在C++环境中实现多线程功能。下面我们将深入探讨多线程的基本概念...
线程并发控制condition 互斥量 多线程写的:生产者、消费者问题
Java中的`ReentrantLock`是Java并发包`java.util.concurrent.locks`中的一个高级锁机制,它是可重入的互斥锁,具有与`synchronized`关键字...在设计和实现多线程程序时,了解和正确使用`ReentrantLock`是非常重要的。
标题“多线程编程之一 介绍+例程”暗示我们将从基础出发,逐步揭示多线程编程的核心原理,并通过实际的代码示例来辅助理解。 首先,我们需要了解什么是多线程编程。在单线程环境中,程序按照顺序执行任务。而在多...
在C++编程中,多线程技术是一种提升程序性能的有效方式,特别是在计算密集型任务中,如求解圆周率(PI)。这个项目名为“C++ 多线程求PI”,其目标是利用多线程并行计算来提高求解PI的效率。Word文档中的思路可能...
多线程同步解决卖票问题
Linux多线程编程是现代操作系统编程的重要组成部分,尤其是在Linux环境下,多线程编程更是成为了高性能应用不可或缺的技术之一。本文档主要涉及Linux多线程编程的一些关键知识点,包括pthread线程库的使用、线程的...
**CC++多线程编程**是现代软件开发中的重要组成部分,尤其在高性能计算、服务器端应用和实时系统中,多线程技术能充分利用多核处理器的资源,提高程序的执行效率。以下是一些关于CC++多线程编程的核心知识点: 1. *...
在多线程环境下,同步是非常关键的,比如使用互斥量(mutex)或条件变量(condition variable)来确保对共享资源的正确访问。 "说明文档.docx"可能会详细解释这段代码的工作原理、如何编译和运行,以及可能遇到的...
在现代软件开发中,多线程技术已经成为必不可少的一部分,特别是在JAVA和C++这样的高级编程语言中。多线程允许程序同时执行多个任务,提高应用程序的响应性和效率。本资源主要探讨了如何在JAVA和C++中实现多线程,...
在IT领域,多线程和网络编程是两个关键的概念,它们在构建高性能、高并发的系统中发挥着至关重要的作用。 多线程是指在一个进程中同时执行多个线程,每个线程独立地执行任务,共享同一内存空间。这种设计模式允许...
在Windows平台上进行软件开发时,Win32 API是不可或缺的一部分,尤其在涉及到多线程编程时。本资源“Win32多线程程序设计全部代码”提供了完整的源代码示例,帮助开发者深入理解和实践如何在Win32环境下创建和管理多...
在C++编程中,多线程技术是一种提升程序性能的重要手段,特别是在Visual Studio 2010这样的开发环境中。本文将深入探讨如何使用VS2010进行C++多线程开发,通过一个具体的Demo来阐述相关概念和技术。 首先,我们要...
在多线程环境中,线程间通信和同步是非常重要的,Java提供了多种机制,如`synchronized`关键字、`wait()`、`notify()`和`notifyAll()`方法,以及`Lock`和`Condition`接口,用于控制线程的执行顺序和资源访问。...
多线程技术则常用于提升程序的执行效率,特别是在需要同时处理多个任务时。本示例结合了这两个概念,展示了如何在编程中实现多线程操作串口,特别是与Modbus协议交互。 首先,我们要理解多线程。在计算机科学中,...