`

java线程(jdk5升级解决方案)

 
阅读更多

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
分享到:
评论

相关推荐

    Java JDK1.5 生产消费者模式解决方案

    Java JDK1.5后新特性,用Lock和Condtion对象解决线程安全问题,提高了效率。

    Java多线程编程实战指南-设计模式篇

    而 解决多线程编程中频繁出现的普遍问题可以借鉴设计模式所提供的现成解决方案。然而,多线程编程相关的设计模式书籍多采用C++作为描述语言,且书中所举的例子多与应用开发人员的实际工作相去甚远。《Java多线程编程...

    Java JDK 7学习笔记(国内第一本Java 7,前期版本累计销量5万册)

     《java jdk 7学习笔记》是作者多年来教学实践经验的总结,汇集了教学过程中学生在学习java时遇到的概念、操作、应用或认证考试等问题及解决方案。  《java jdk 7学习笔记》针对java se 7新功能全面改版,无论是...

    JAVA2核心技术(中文的PDF).part3.rar

    全面覆盖Java 2技术的高级主题,包括:多线程、集合框架、网络API、数据库编程、分布式对象等,深入探究了Swing、Java 2D API、JavaBean、Java安全模式、XML、注释、元数据等主题,同时涉及本地方法、国际化以及JDK ...

    Java Cpu 无响应解决方案

    占用cpu高的线程的堆栈如下: Thread 1 (process 17775): #0 0x00007fa870981179 in Klass::subklass() const () from /usr/java/jdk1.8.0_45/jre/lib/amd64/server/libjvm.so #1 0x00007fa8706d15c5 in ...

    Java虚拟机并发编程

    并发策略,阐释了影响并发性的因素、如何有效实现并发,以及并发的设计方法等;第二部分:现代Java/JDK并发,...第五部分:后记,回顾了《Java虚拟机并发编程》讨论的解决方案并总结了并发编程中的注意事项和最佳实践。

    Thinking in Java简体中文(全)

    A.2 微软的解决方案 A.3 J/Direct A.3.1 @dll.import引导命令 A.3.2 com.ms.win32包 A.3.3 汇集 A.3.4 编写回调函数 A.3.5 其他J/Direct特性 A.4 本原接口(RNI) A.4.1 RNI总结 A.5 Java/COM集成 A.5.1 COM基础 A....

    java高级特性,涵盖了多种java常用的一些例子

    涉及多种线程,死锁,同步队列,异步线程,涵盖了java的自定义注解及反射,包含了23种设计模式,含注释, ...它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案

    java 编程入门思考

    A.2 微软的解决方案 A.3 J/Direct A.3.1 @dll.import引导命令 A.3.2 com.ms.win32包 A.3.3 汇集 A.3.4 编写回调函数 A.3.5 其他J/Direct特性 A.4 本原接口(RNI) A.4.1 RNI总结 A.5 Java/COM集成 A.5.1 COM基础 A....

    Java初学者入门教学

    A.2 微软的解决方案 A.3 J/Direct A.3.1 @dll.import引导命令 A.3.2 com.ms.win32包 A.3.3 汇集 A.3.4 编写回调函数 A.3.5 其他J/Direct特性 A.4 本原接口(RNI) A.4.1 RNI总结 A.5 Java/COM集成 A.5.1 COM基础 A....

    java联想(中文)

    A.2 微软的解决方案 A.3 J/Direct A.3.1 @dll.import引导命令 A.3.2 com.ms.win32包 A.3.3 汇集 A.3.4 编写回调函数 A.3.5 其他J/Direct特性 A.4 本原接口(RNI) A.4.1 RNI总结 A.5 Java/COM集成 A.5.1 COM基础 A....

    JAVA2核心技术第7版卷2高级特性-中文版

    所有的示例程序都已进行更新,而且经过精心的构思,从而可以阐明针对职业开发者所碰到的实际问题类型的实战性解决方案。 《Java2核心技术卷2:高级特性》是Java 2技术权威指南,全面覆盖Java 2技术的高级主题,包括:...

    JAVA_Thinking in Java

    A.2 微软的解决方案 A.3 J/Direct A.3.1 @dll.import引导命令 A.3.2 com.ms.win32包 A.3.3 汇集 A.3.4 编写回调函数 A.3.5 其他J/Direct特性 A.4 本原接口(RNI) A.4.1 RNI总结 A.5 Java/COM集成 A.5.1 COM基础 A....

    Thinking in Java 中文第四版+习题答案

    A.2 微软的解决方案 A.3.1 @dll.import引导命令 A.3.2 com.ms.win32包 A.3.3 汇集 A.3.4 编写回调函数 A.3.5 其他J/Direct特性 A.4 本原接口(RNI) A.4.1 RNI总结 A.5 Java/COM集成 A.5.1 COM基础 A.5.2 MS Java/...

    秦小波-编写高质量代码:改善Java程序的151个建议(带索引书签目录高清扫描版).pdf

    内容全部由java编码的最佳实践组成,从语法、程序设计和架构、工具和框架、编码风格和编程思想等五大方面,对java程序员遇到的各种棘手的疑难问题给出了经验性的解决方案,为java程序员如何编写高质量的java代码提出...

    JAVA高并发高性能高可用高扩展架构视频教程

    企业级高并发缓存解决方案 性能优化之Oracle语句优化雾区 前后台数据验证架构源码级解析 session跨域共享 JAVANIO原理详解 高并发数据库(Mysql数据库性能优化) 软件质量管控 企业常用框架springMVC基于注解+xml配置...

    JAVA基础课程讲义

    死锁及解决方案 179 生产者/消费者模式 181 线程回顾总结 184 任务调度(补充内容,了解即可!) 184 思考作业 185 上机作业 185 第十章 网络编程 186 基本概念 186 什么是计算机网络 186 计算机网络的主要功能 186 ...

Global site tag (gtag.js) - Google Analytics