`
annan211
  • 浏览: 463182 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

jdk 5.0之后的生产者消费者

 
阅读更多
package threadJDK5;

import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class ThreadTestJDK5 {
	public static void main(String[] args) {
		Resource r = new Resource();

		Producer p = new Producer(r);
		Consumer c = new Consumer(r);

		Thread t1 = new Thread(p);
		Thread t2 = new Thread(c);

		t1.start();
		t2.start();
	}
}

class Resource{
	private String name;
	private int num;
	private boolean flag;
	private Lock lock = new ReentrantLock();
	private Condition condition_pro = lock.newCondition();
	public void set(Resource r) throws InterruptedException{
		lock.lock();
		if(!r.flag){
			if(num % 2 == 0){
				this.name = "张三------" + num++;
			}else{
				this.name = "丽丽------" + num++;
			}
			System.out.println("生产..."+this.name);
			r.flag = true;
			condition_pro.signal();
		}else{
			try {
				condition_pro.await();
			}  finally{
				lock.unlock();
			}
		}
	}

	public void out(Resource r) throws InterruptedException{
		lock.lock();
		if(r.flag){
			System.out.println("消费..."+r.name);
			r.flag = false;
			condition_pro.signal();
		}else{
			try {
				condition_pro.await();
			} finally{
				lock.unlock();
			}
		}
	}
}

class Producer implements Runnable{
	private Resource r;
	public Producer(Resource r){
		this.r = r;
	}
	public void run(){
		while(true){
			try {
				r.set(r);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}

class Consumer implements Runnable{
	private Resource r;
	public Consumer(Resource r){
		this.r = r;
	}
	public void run(){
		while(true){
			try {
				r.out(r);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
}


分享到:
评论

相关推荐

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

    在JDK 1.5及以后的版本中,Java引入了`java.util.concurrent`包,其中包含了一些强大的并发工具类,如`Lock`接口和`Condition`接口,这些工具大大提升了生产者消费者模式的实现效率和线程安全性。 生产者消费者模式...

    JDK1.5 64位绿色版

    JDK1.5,也被称为Java SE 5.0(Java Standard Edition 5.0),是Sun Microsystems在2004年发布的一个重要版本,引入了许多关键性的新特性和改进,对于Java的发展具有里程碑式的意义。 1. **泛型(Generics)** JDK...

    jdk1.5中文帮助文档

    1.5版本,也被称为Java SE 5.0,是一个重要的里程碑,引入了许多创新性的改变,提升了Java的性能、可维护性以及开发者的生产力。 1. **泛型**:JDK 1.5引入了泛型,允许在定义类、接口和方法时指定参数类型,提高了...

    ibm jdk1.5 fou linux

    IBM JDK 1.5,也被称为Java 5.0,是一个重要的版本升级,引入了多项新特性和改进。以下是这个版本的一些关键知识点: 1. **泛型(Generics)**:这是Java 5.0的重大特性,允许在类型定义时指定参数化类型,提高了...

    java-wrox-Beginning Java 5.0 2005

    《Ivor Horton’s Beginning Java™ 2, JDK™ 5 Edition》是一本非常适合初学者学习Java 5.0的入门书籍。通过本书的学习,不仅可以了解Java的基本语法和面向对象编程的核心概念,还能深入掌握Java 5.0引入的重要新...

    Java学习路线:day19

    生产者/消费者问题JDK5.0新增线程创建方式创建多线程的方式三:实现Callable接口使用线程池的好处创建多线程的方式四:使用线程池 原文:https://shimo.im/docs/KGCJKyrgG8rtXj3G/ 《第8章 多线程》 第8章

    Java泛型

    extends T`用于表示生产者(Producer),适合于读取操作,因为你可以从这样的集合中取出`T`类型或其子类的对象。 - `? super T`用于表示消费者(Consumer),适合于写入操作,因为你可以向这样的集合中添加`T`类型...

    Java JDK实例宝典

    全部代码出自电子工业出版社夏先波的《Java JDK实例宝典》一书,本书以J2SE 5.0为开发环境,选取Java应用的典型实例,循序渐进地介绍了Java语言的各种开发方法和技巧,实例代码注释详细规范,思路清晰。 第1章 ...

    java自带并发框架

    - **阻塞队列(Blocking Queues)**:如`ArrayBlockingQueue`和`LinkedBlockingQueue`,在生产者消费者模式中广泛应用,线程安全且高效。 - **并发集合(Concurrent Collections)**:如`ConcurrentHashMap`、`...

    ActiveMQ开发实例-6

    - 生产者和消费者无需在同一时间在线。 - **发布/订阅模型** (Topic) - 发布者将消息发布到特定的主题上,订阅者可以选择订阅这些主题来接收消息。 - 发布者和订阅者之间是匿名的,即他们不知道对方的存在。 - ...

    【BAT必备】并发编程锁面试题

    - **性能**:JDK 5.0之后,synchronized进行了大量优化,但在某些场景下ReentrantLock仍然具有性能优势。 - **使用场景**:synchronized适用于简单同步需求;ReentrantLock适用于复杂同步逻辑。 **3.2 为什么说...

    java jdk实列宝典 光盘源代码

    生产者、消费者问题;线程的优先级;列出虚拟机中所有的线程;守护线程Daemon;线程池;一个死锁的例子; 定时器Timer:包括在指定时间执行任务,在指定时间之后执行任务以及在某个时间之后每隔时间段重复执行的任务...

    JavaThread.pdf

    - 通过java.util.concurrent包下的BlockingQueue实现,可以创建生产者消费者模型。 - 阻塞队列包括ArrayBlockingQueue、LinkedBlockingQueue、PriorityBlockingQueue、DelayQueue等,提供线程安全的队列操作。 7....

    java8大知名人物.docx

    3. **Joshua Bloch** - 作为Google的首席Java架构师,Bloch在Sun Microsystems时领导了Java平台的关键特性开发,如JDK 5.0的语法增强和Java集合框架。他的著作《Effective Java》和《Java Concurrency in Practice》...

    Eclipse+tomcat的安装配置

    ### Eclipse+Tomcat的安装与配置详解 #### 一、前言 本文旨在详细介绍如何安装配置Eclipse与Tomcat,使读者能够顺利地在本地环境中搭建起...此外,对于生产环境,还需考虑安全性、稳定性等因素,进行更为细致的配置。

    Java基础+Android面试题

    9. Java并发:包括创建线程的三种方式、Synchronized关键字和ReentrantLock的使用、线程池的使用、死锁的处理、生产者/消费者模式等并发编程的核心概念。 10. Java虚拟机:讨论了对象的创建、内存布局、访问定位,...

    Java术语详解

    - **生产者与消费者:** 生产者发送消息,消费者接收消息。 - **目的地:** 指消息队列或主题,是消息的最终目标。 #### RPC (Remote Procedure Call Protocol) **简介:** RPC,即远程过程调用协议,是一种通过...

    java学习流程和知识点

    特别地,JDK5.0的新特性如自动装箱、枚举、泛型和可变参数等,对于理解现代Java编程至关重要。 2. **UNIX开发环境**: 对于在UNIX平台上进行开发的开发者,掌握基本的UNIX命令和系统工作原理是必要的。这包括文件...

    Java并发编程实践-电子书-03章

    在JDK5.0之后,Java引入了一系列高级并发特性,其中多数特性集中于`java.util.concurrent`包内,旨在为多线程并发编程提供强大的工具集。这一包不仅充分利用了现代多处理器和多核系统的优势,而且极大地简化了大规模...

Global site tag (gtag.js) - Google Analytics