- 浏览: 77394 次
- 性别:
- 来自: 深圳
文章分类
最新评论
/*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){ } } } }
发表评论
-
151多线程(优先级&yield方法)
2015-10-28 11:16 694/* 养成习惯:数据共享用静态 */ class Dem ... -
150_多线程(Join方法)
2015-10-27 18:31 610/* join: 当A线程执行到了B线程的join方法 ... -
114_面向对象(多异常处理)_黑马程序员_Java基础视频
2015-10-25 23:27 695/* 对多异常的处理 1.生命异常时,建议声明更为具体的异 ... -
113_面向对象(异常声明throws)_黑马程序员_Java基础视频
2015-10-25 23:26 481/* 异常:就是程序在运行时出现不正常情况 异常由来:问题 ... -
112_面向对象(异常try-catch)
2015-10-25 23:25 733/* 异常:就是程序在运行时出现不正常情况 异常由来:问题 ... -
148_多线程(停止线程)
2015-10-25 23:16 580/* stop方法已经过时。 如何停止线程? 只有一 ... -
146_多线程(线程间通信-生产者消费者)
2015-10-20 23:35 627一个生产者一个消费者 ... -
144_多线程(线程间通信-等待唤醒机制)
2015-10-20 18:35 721class Res{ String name; Str ... -
142_多线程-线程间通信
2015-10-20 16:18 703/* 线程间通讯: 其实就是多线程在操作同一个资源。 但 ... -
141多线程-死锁
2015-10-20 14:45 693/* 死锁: 同步中嵌套同步 */ class T ... -
140_多线程(多线程-单例设计模式-懒汉式)
2015-10-19 11:45 688/* 单例设计模式 饿汉式 class Single ... -
138_多线程(多线程-同步函数的锁是this)
2015-10-15 14:48 847/* 同步函数用的是哪一个锁呢? 函数需要被对象调用。那么 ... -
137_多线程(多线程-同步函数)
2015-10-13 23:25 599/* 需求:银行有一个金库。 有两个储户分别存300元 ... -
135_多线程(多线程的安全问题)
2015-10-13 18:07 609class TWindow implements Runnab ... -
多线程(创建线程-实现Runnable接口)
2015-10-10 00:19 554class TWindow implements Runnab ... -
133_多线程(售票的例子)
2015-10-09 23:48 645/* 需求:简单的买票程序 多个窗口卖票 */ c ... -
132_多线程(获取线程对象以及名称)
2015-10-09 23:30 1216/* 练习:创建两个线程,和主线程交替运行 线程都有自 ... -
多线程-继承Thread类
2015-10-09 00:26 1560/* 进程:是一个正在执行中的程序 每一个进程执行都有一个 ... -
包的应用
2015-10-08 23:28 1665package pack; class PackageD ... -
异常总结
2015-10-05 20:07 574异常是什么? 是对问题的描述,将问题进行对象的封装。 ...
相关推荐
在Java编程语言中,生产者消费者模式是一种经典的多线程设计模式,用于处理并发问题。在JDK 1.5及以后的版本中,Java引入了`java.util.concurrent`包,其中包含了一些强大的并发工具类,如`Lock`接口和`Condition`...
- **并发工具包**:包括了新的并发类,如`Executor`框架、`ConcurrentHashMap`等,使得编写多线程程序更加容易。 - **泛型集合**:提供了泛型化的集合类,提高了类型安全性。 - **正则表达式引擎**:支持更强大的...
### Java多线程知识点总结及企业真题解析 #### 一、知识点总结 ##### (1)多线程相关概念 1. **程序、进程和线程的区分**: - **程序**:为了完成特定的任务而编写的指令集合。它是静态的概念。 - **进程**:...
- 通过java.util.concurrent包下的BlockingQueue实现,可以创建生产者消费者模型。 - 阻塞队列包括ArrayBlockingQueue、LinkedBlockingQueue、PriorityBlockingQueue、DelayQueue等,提供线程安全的队列操作。 7....
生产者/消费者问题JDK5.0新增线程创建方式创建多线程的方式三:实现Callable接口使用线程池的好处创建多线程的方式四:使用线程池 原文:https://shimo.im/docs/KGCJKyrgG8rtXj3G/ 《第8章 多线程》 第8章
9. **集合框架增强**:对Java集合框架进行了优化,包括更强大的List、Set和Map实现,以及新的并发集合类,如ConcurrentHashMap,适应多线程环境。 10. **异常链**:在处理异常时,可以创建异常链,记录并展示完整的...
生产者消费者模式是一种典型的多线程应用场景。使用ReentrantLock可以有效地管理资源访问权限,避免数据冲突。 ```java public class ProducerConsumerExample { private final Lock lock = new ReentrantLock(); ...
Java并发框架是Java JDK中内置的一系列用于处理多线程并行执行的工具和类库,自JDK 5.0引入以来,极大地简化了并发编程的复杂性。这个框架由Doug Lea设计,并在JSR-166任务中提出,最终在Tiger(JDK 5)版本中被引入...
全部代码出自电子工业出版社夏先波的《Java JDK实例宝典》一书,本书以J2SE 5.0为开发环境,选取Java应用的典型实例,循序渐进地介绍了Java语言的各种开发方法和技巧,实例代码注释详细规范,思路清晰。 第1章 ...
- 阻塞队列(BlockingQueues)及其在生产者-消费者模式中的应用。 5. **高级并发设计模式** - Future与Callable接口的使用,以及FutureTask类的作用。 - Executor框架的原理与ExecutorService接口的实现。 - ...
生产者、消费者问题;线程的优先级;列出虚拟机中所有的线程;守护线程Daemon;线程池;一个死锁的例子; 定时器Timer:包括在指定时间执行任务,在指定时间之后执行任务以及在某个时间之后每隔时间段重复执行的任务...
Java 多线程机制 - **线程创建方式**:继承 Thread 类、实现 Runnable 接口。 - **同步机制**:synchronized 关键字、ReentrantLock 等。 - **并发工具类**:如 ExecutorService、Semaphore 等。 - **线程安全问题...
9. Java并发:包括创建线程的三种方式、Synchronized关键字和ReentrantLock的使用、线程池的使用、死锁的处理、生产者/消费者模式等并发编程的核心概念。 10. Java虚拟机:讨论了对象的创建、内存布局、访问定位,...
1. **Core Java**: Core Java是学习Java的基础,包括数据类型、控制结构、类、对象、接口、异常处理、多线程和输入/输出流等内容。特别地,JDK5.0的新特性如自动装箱、枚举、泛型和可变参数等,对于理解现代Java编程...
《Java并发编程实战》是一本深入探讨Java平台并发编程的权威指南,由Tim Peierls等人与Brian Goetz合著,旨在帮助Java开发者理解和掌握在多线程环境中编写高效、安全的代码。这本书由拥有丰富经验的JDK并发大师及...
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 获取当前正在...