`

147_多线程(线程间通信-生产者消费者JDK5.0升级版)

阅读更多
/*JDK1.5及以上提供了多线程升级解决方案。
将同步Synchronized替换成Lock操作。
将Object中的wait,notify,notifyAll,用Condition对象替换。
该对象可以用lock进行获取。

该实例中实现了本方只唤醒对方的操作。
及生产者只唤醒消费者。
消费者只唤醒生产者。
*/


import java.util.concurrent.locks.*;

class ProducerConsumer{
	public static void main(String[] args){
		Resource r = new Resource();
		Producer pro = new Producer(r);
		Consumer con = new Consumer(r);
		
		Thread t1 = new Thread(pro);
		Thread t2 = new Thread(pro);
		Thread t3 = new Thread(con);
		Thread t4 = new Thread(con);
		
		t1.start();
		t2.start();
		t3.start();
		t4.start();
	}
}

class Resource{
	private String name;
	private int count = 1;
	private boolean flag = false;
	
	private Lock lock = new ReentrantLock();
	
	private Condition conProducer = lock.newCondition();
	private Condition conConsumer = lock.newCondition();
	
	public void set(String name)throws InterruptedException{
		lock.lock();
		try{
			while(flag)
				conProducer.await();
			this.name = name +"--"+count++;
			System.out.println(Thread.currentThread().getName()+
			"-生产者-"+this.name);
			flag = true;
			conConsumer.signal();
		}
		finally{
			lock.unlock();
		}
	}
	
	public void out()throws InterruptedException{
		lock.lock();
		try{
			while(!flag)
				conConsumer.await();
			System.out.println(Thread.currentThread().getName()+
			"-消费者-"+this.name);
			flag = false;
			conProducer.signal();
		}
		finally{
			lock.unlock();
		}
	}
}

class Producer implements Runnable{
	private Resource res;
	
	Producer(Resource res){
		this.res = res;
	}
	public void run(){
		while(true){
			try{
				res.set("+商品+");
			}
			catch(InterruptedException e){
				
			}
			
		}
	}
}

class Consumer implements Runnable{
	private Resource res;
	
	Consumer(Resource res){
		this.res = res;
	}
	public void run(){
		while(true){
			try{
				res.out();
			}
			catch(InterruptedException e){
				
			}
		}
	}
}
分享到:
评论

相关推荐

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

    在Java编程语言中,生产者消费者模式是一种经典的多线程设计模式,用于处理并发问题。在JDK 1.5及以后的版本中,Java引入了`java.util.concurrent`包,其中包含了一些强大的并发工具类,如`Lock`接口和`Condition`...

    java-wrox-Beginning Java 5.0 2005

    - **并发工具包**:包括了新的并发类,如`Executor`框架、`ConcurrentHashMap`等,使得编写多线程程序更加容易。 - **泛型集合**:提供了泛型化的集合类,提高了类型安全性。 - **正则表达式引擎**:支持更强大的...

    Java多线程-多线程知识点总结和企业真题

    ### Java多线程知识点总结及企业真题解析 #### 一、知识点总结 ##### (1)多线程相关概念 1. **程序、进程和线程的区分**: - **程序**:为了完成特定的任务而编写的指令集合。它是静态的概念。 - **进程**:...

    JavaThread.pdf

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

    Java学习路线:day19

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

    jdk1.5中文帮助文档

    9. **集合框架增强**:对Java集合框架进行了优化,包括更强大的List、Set和Map实现,以及新的并发集合类,如ConcurrentHashMap,适应多线程环境。 10. **异常链**:在处理异常时,可以创建异常链,记录并展示完整的...

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

    生产者消费者模式是一种典型的多线程应用场景。使用ReentrantLock可以有效地管理资源访问权限,避免数据冲突。 ```java public class ProducerConsumerExample { private final Lock lock = new ReentrantLock(); ...

    java自带并发框架

    Java并发框架是Java JDK中内置的一系列用于处理多线程并行执行的工具和类库,自JDK 5.0引入以来,极大地简化了并发编程的复杂性。这个框架由Doug Lea设计,并在JSR-166任务中提出,最终在Tiger(JDK 5)版本中被引入...

    Java JDK实例宝典

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

    [Java并发编程实践].(Java.Concurrency.in.Practice).Brian.Goetz.文字版

    - 阻塞队列(BlockingQueues)及其在生产者-消费者模式中的应用。 5. **高级并发设计模式** - Future与Callable接口的使用,以及FutureTask类的作用。 - Executor框架的原理与ExecutorService接口的实现。 - ...

    java jdk实列宝典 光盘源代码

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

    想学java,新手学java,怎样才能学好java,java视频教程,零基础学习java--java学习指导文档.doc

    Java 多线程机制 - **线程创建方式**:继承 Thread 类、实现 Runnable 接口。 - **同步机制**:synchronized 关键字、ReentrantLock 等。 - **并发工具类**:如 ExecutorService、Semaphore 等。 - **线程安全问题...

    Java基础+Android面试题

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

    java学习流程和知识点

    1. **Core Java**: Core Java是学习Java的基础,包括数据类型、控制结构、类、对象、接口、异常处理、多线程和输入/输出流等内容。特别地,JDK5.0的新特性如自动装箱、枚举、泛型和可变参数等,对于理解现代Java编程...

    Java并发编程实战华章专业开发者书库 (Tim Peierls 等 美Brian Goetz).pdf

    《Java并发编程实战》是一本深入探讨Java平台并发编程的权威指南,由Tim Peierls等人与Brian Goetz合著,旨在帮助Java开发者理解和掌握在多线程环境中编写高效、安全的代码。这本书由拥有丰富经验的JDK并发大师及...

    javaSE代码实例

    16.4.5 “生产者-消费者”案例的实际运行 365 16.4.6 notify方法的使用 366 16.4.7 同步的语句块 367 16.4.8 线程的死锁 369 16.4.9 防止错误的使用wait、notify、notifyAll方法 371 16.5 获取当前正在...

Global site tag (gtag.js) - Google Analytics