Lock+Condition控制同步。
package com.zzy.syn;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/**
* java1.5提供的同步方式
* lock + condition
* @author eason
*
*/
public class TestLock {
public static void main(String[] args) {
final Service service = new Service();
//线程sub1调用service的sub1方法
new Thread(new Runnable() {
@Override
public void run() {
service.sub1();
}
}, "sub1").start();
//线程sub2调用service的sub2方法
new Thread(new Runnable() {
@Override
public void run() {
service.sub2();
}
}, "sub2").start();
//线程sub3调用service的sub31方法
new Thread(new Runnable() {
@Override
public void run() {
service.sub3();
}
}, "sub3").start();
}
static class Service {
private int shouldSubNum = 1; //此时该sub几方法执行
private Lock lock = new ReentrantLock();
Condition sub1 = lock.newCondition();
Condition sub2 = lock.newCondition();
Condition sub3 = lock.newCondition();
public void sub1() {
lock.lock();
try{
while(shouldSubNum != 1) {
try {
sub1.await(); //该sub2或sub3方法执行时,调用sub1方法的sub1线程等待
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("sub1 method execute");
shouldSubNum = 3; //sub1方法线程完后,轮到sub3执行
sub3.signal(); //唤醒调用sub3方法的sub3线程
} finally {
lock.unlock();
}
}
public void sub2() {
lock.lock();
try{
while(shouldSubNum != 2) {
try {
sub2.await(); //该sub1或sub3方法执行时,调用sub2方法的sub2线程等待
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("sub2 method execute");
shouldSubNum = 1; //sub2方法线程完后,轮到sub1执行
sub1.signal(); //唤醒调用sub1方法的sub1线程
} finally {
lock.unlock();
}
}
public void sub3() {
lock.lock();
try{
while(shouldSubNum != 3) {
try {
sub3.await(); //该sub1或sub2方法执行时,调用sub3方法的sub3线程等待
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("sub3 method execute");
shouldSubNum = 2; //sub3方法线程完后,轮到sub2执行
sub2.signal(); //唤醒调用sub2方法的sub2线程
} finally {
lock.unlock();
}
}
}
}
相关推荐
在Java编程中,多线程并发是提升程序执行效率、充分利用多核处理器资源的重要手段。本文将基于"java 多线程并发实例"这个主题,深入探讨Java中的多线程并发概念及其应用。 首先,我们要了解Java中的线程。线程是...
最后,Java并发库还包含了很多其他有用的工具,如Semaphore(信号量)用于控制同时访问特定资源的线程数量,CyclicBarrier(循环屏障)和CountDownLatch(计数器门锁)用于多线程间的协作,以及Lock接口及其实现如...
《深入学习:Java多线程编程》是一本专注于Java并发技术的专业书籍,旨在帮助开发者深入理解和熟练运用Java中的多线程编程。Java多线程是Java编程中的核心部分,尤其在现代高性能应用和分布式系统中不可或缺。理解并...
Java多线程与并发编程是Java开发中至关重要的一部分,它涉及到如何高效地利用CPU资源,以实现程序的并行执行。在操作系统层面,多任务和多进程是通过分配不同的内存空间来实现的,而线程则共享同一进程的内存,这...
4. **并发控制**:为了避免多线程间的竞态条件和资源冲突,可能需要使用锁或其他同步机制,如`threading.Lock`。例如,在写入识别结果到文件或数据库时,需要确保同一时刻只有一个线程在操作。 5. **错误处理**:多...
在Java编程领域,高并发和多线程是关键的技术之一,尤其在服务器端应用和大数据处理中至关重要。这个"高并发多线程处理demo-java.rar"压缩包提供了一个实际的Java实现,展示了如何构建一个并发队列来接收数据,并...
另外,Java并发API(java.util.concurrent包)提供了一系列高级并发工具,如`ConcurrentHashMap`(线程安全的哈希映射)、`BlockingQueue`(阻塞队列)和`Future`(异步计算结果)。这些工具可以帮助开发者更好地...
### Java中的两种多线程实现方式 在Java中,实现多线程的两种主要方式分别是:**通过继承`Thread`类** 和 **实现`Runnable`接口**。下面将详细介绍这两种方式,并提供相应的示例程序。 #### 一、通过继承`Thread`...
在Java编程领域,并发编程是一项核心技能,尤其是在大型系统或分布式应用中,高效地处理多线程和并发操作是至关重要的。"Java并发编程与实践"文档深入剖析了这一主题,旨在帮助开发者理解和掌握如何在Java环境中有效...
1. 同步机制:避免多线程环境下数据不一致,Java提供了synchronized关键字、volatile变量、Lock接口(如ReentrantLock)等同步工具。 2. 死锁:多个线程互相等待对方释放资源导致的僵局,需要避免和处理死锁。 3. ...
通过以上方法,我们可以在Java中有效地利用多线程处理数据库数据,提高程序的并发能力和效率。记得在设计时充分考虑线程间的协作与同步,以及数据库连接的管理和优化,以确保程序的稳定性和性能。
Java并发性和多线程是Java开发中至关重要的概念,它们涉及到如何在单个或多个处理器上同时执行程序的不同部分,从而提升程序的效率和响应速度。在这个领域,Java提供了丰富的工具和API,使得开发者能够有效地管理和...
配合`JAVA多线程总结.ppt`,你可以得到一个更直观和简洁的概览,快速回顾和掌握上述关键知识点。虽然中文版翻译可能存在不足,但原版英文书籍通常能更准确地传达作者的意图和细节,值得深入阅读。
在多线程环境下,可能会出现数据竞争问题,为了解决这个问题,Java提供了多种同步机制,如synchronized关键字、wait/notify机制、Lock锁(ReentrantLock)等。synchronized用于控制对共享资源的访问,而wait/notify...
13. **并发集合**:Java并发库提供了一些线程安全的集合,如`ConcurrentHashMap`, `CopyOnWriteArrayList`, `ConcurrentLinkedQueue`等,它们在多线程环境下表现更优。 在实际项目中,理解和熟练运用这些多线程知识...
总结,Java多线程设计是构建高性能、高并发应用的基础。通过理解并合理使用不可变对象,我们可以有效预防多线程环境中的非安全问题,确保程序的稳定性和正确性。在实际开发中,结合各种线程同步机制和并发工具,可以...
### JAVA中的单线程与多线程概念解析 #### 单线程的理解 在Java编程环境中,单线程指的是程序执行过程中只有一个线程在运行。这意味着任何时刻只能执行一个任务,上一个任务完成后才会进行下一个任务。单线程模型...
在Java中,多线程可以提高程序的执行效率,尤其在处理并发任务时,如大文件的上传、下载和传输。下面将详细探讨相关知识点。 1. **线程基础** - **线程定义**:线程是操作系统分配CPU时间的基本单位,是程序执行的...
Java并发多线程是Java编程中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,多线程主要通过`Thread`类、`Runnable`接口以及`ExecutorService`来实现。下面我们将深入探讨...