jdk5提供了将同步synchronized替换成了现实Lock操作。将Object中的wait,notify,notifyAll,替换了Condition对象,该实例实现了本方唤醒对方操作
代码如下:
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.ReentrantLock;
/**
* 生产消费者问题
*
* jdk 1.5之后提供了多线程升级解决方案
*
* 1.将同步synchronized替换成 lock操作
* 2.将Object中的wait(),notify(),notifyAll()替换成了Condition该对象可以用lock来得到
* 3.该实例中实现了本方唤醒对方操作
*
* @author Yxx
*
*/
public class ConditionThread2 {
public static void main(String agrs[]){
Res3 r = new Res3();
Producer1 p = new Producer1(r);
Consumer1 c = new Consumer1(r);
Thread t1 = new Thread(p);
Thread t2 = new Thread(c);
Thread t3 = new Thread(p);
Thread t4 = new Thread(c);
t1.start();
t2.start();
t3.start();
t4.start();
}
}
/**
* 资源
* @author Yxx
*
*/
class Res3{
private String name;
boolean flag = false;
ReentrantLock lock = new ReentrantLock();
private Condition con1 = lock.newCondition();
private Condition con2 = lock.newCondition();
public void set(String name)throws IllegalMonitorStateException{
lock.lock(); //得到同步锁
try{
while(flag)
try {
con1.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
this.name = name;
System.out.println("生产者生产了商品--------------->"+this.name);
flag = true;
con2.signal();
}finally{
lock.unlock();//释放解锁
}
}
public void out(){
lock.lock(); //得到同步锁
try{
while(!flag)
con2.await();
System.out.println("消费者消费了商品-------------------------------------------->"+this.name);
flag = false;
con1.signal();
} catch (InterruptedException e) {
e.printStackTrace();
}finally{
lock.unlock(); //释放解锁
}
}
}
/**
* 生产者
* @author Yxx
*
*/
class Producer1 implements Runnable{
Res3 r;
public Producer1(Res3 r){
this.r = r;
}
public void run() {
while(true){
r.set("商品");
}
}
}
class Consumer1 implements Runnable{
Res3 r;
public Consumer1(Res3 r){
this.r = r;
}
public void run(){
while(true){
r.out();
}
}
}
- 大小: 29.7 KB
分享到:
相关推荐
在JDK5中,Java引入了一套强大的多线程并发库,极大地提升了多线程编程的效率和安全性。这个库提供了丰富的类和接口,使得开发者能够更好地控制线程的执行、同步和通信。 1. **线程** - **线程与进程的关系**:...
- **搜索引擎**:Google 等搜索引擎可以帮助查找问题解决方案。 - **社区参与**:加入 JavaWorld 等社区论坛,与其他开发者交流经验。 - **学习路径**:按照官方提供的学习路径图逐步深入学习。 #### 六、入门...
在JDK 1.5及以后的版本中,Java引入了`java.util.concurrent`包,其中包含了一些强大的并发工具类,如`Lock`接口和`Condition`接口,这些工具大大提升了生产者消费者模式的实现效率和线程安全性。 生产者消费者模式...
通过研究源码,开发者可以了解到这些特性的底层实现,为日常开发提供更高效的解决方案。 JDK 1.7源码则带来了更多的改进和新特性。这个版本引入了try-with-resources语句,使得资源管理更加简洁和安全;增加了...
"使用说明.txt" 文件很可能包含了关于如何安装和配置JDK 1.8u172的详细步骤,以及可能遇到的问题和解决方案。对于初学者来说,这是一个非常重要的资源,因为它可以指导他们正确地进行安装和配置,避免常见的错误。 ...
1. 集合框架:ArrayList、LinkedList、HashSet、HashMap等,提供了数据存储和操作的高效解决方案。 2. I/O流:FileInputStream、FileOutputStream、BufferedReader、BufferedWriter等,用于处理文件和数据流。 3. ...
**Java Development Kit (JDK) 1.7.0_...总之,JDK 1.7.0_79是Java开发的重要工具,对于那些需要在Mac上使用Java 7的开发者来说,这是一个便捷的免安装解决方案。不过,始终关注软件的安全性和更新是每个开发者的责任。
Java JDK API是Java开发工具包的核心组成部分,包含了Java语言的核心库和开发...在开发过程中,遇到任何问题,都可以在这里找到对应的解决方案。无论是初学者还是经验丰富的开发者,都应该熟练掌握并利用好这份资源。
- **解决方案**:可以使用自定义`Map`以`Thread`对象为Key保存数据,或者使用`ThreadLocal`,它为每个线程维护独立的变量副本,确保线程安全。 6. **原子类型**: - **原子类型**:JDK5引入`java.util.concurrent...
2. Java社区:Stack Overflow、CSDN、GitHub等社区有大量开发者分享的经验和问题解决方案。 3. 开源项目:通过参与开源项目,可以实践和理解JDK 1.70 API的实际应用。 4. 书籍:如《Java核心技术卷》、《Effective...
这些工具为开发者提供了编写、编译、调试和打包Java程序的全套解决方案。 二、Java编程基础 宝典中的实例将涵盖基本的Java语法,如变量、数据类型、运算符、流程控制(条件语句、循环语句)、方法、数组等。通过...
- **JDK1.5线程并发库**:引入了更高级的并发控制机制,如`ExecutorService`、`Callable`、`Future`等,提供了更安全、更高效的多线程解决方案,减少了线程同步和死锁的风险。 ##### 2. 创建线程的两种传统方式 - ...
这个问题在"Hibernate相关jar包括新版本jdk不兼容旧版本的jar.zip"这个压缩包中被提及,表明其中可能包含了针对这种兼容性问题的解决方案。 首先,我们需要理解为什么新版本的JDK可能导致与Hibernate的不兼容性。...
7. **README.html**: 这是JDK的官方说明文档,提供了安装指南、使用提示和已知问题的解决方案。 8. **release**: 这个文件包含了关于当前JDK版本的具体信息,如版本号、构建号、实现的Java版本规范等。 9. **...
通过参考中文或英文的API文档,开发者可以在遇到问题时迅速找到解决方案,或者在设计新功能时了解已有的工具和方法。在实际开发中,结合具体的案例和实践,不断学习和探索API的使用,将有助于提升编程技能。
本项目是采用JDK并发机制的Java多线程归类处理闩设计源码,包含29个文件,包括17个Java源文件、8个XML配置文件、1个gitattributes文件、1个iml...ConcurrentLatch工具为多线程的归类并发处理提供了一种高效解决方案。
通过正确安装和配置,开发者可以利用Java的强大功能和广泛兼容性,构建高效、可靠的软件解决方案。无论是初学者还是经验丰富的开发者,都应该熟悉并掌握Java JDK的使用,因为它在现代软件开发中扮演着至关重要的角色...
而 解决多线程编程中频繁出现的普遍问题可以借鉴设计模式所提供的现成解决方案。然而,多线程编程相关的设计模式书籍多采用C++作为描述语言,且书中所举的例子多与应用开发人员的实际工作相去甚远。《Java多线程编程...
理解TCP和UDP协议,以及ServerSocket和Socket类的用法,可以帮助构建网络通信解决方案。 8. **泛型**:J2SE 5.0引入的泛型提高了代码的类型安全性和重用性。通过在类、接口和方法中使用类型参数,可以限制容器中...
Java JDK API 1.6中文版是针对Java开发者极其重要的参考资料,它包含了Java SE(标准版)6的所有公共类、接口、枚举和注解的详细文档...在实际开发中,遇到问题时,查阅API文档通常能迅速找到解决方案,提升开发效率。