JDK 5中将synchronized替换成现实的Lock,将Object中的wait notify notofyAll替换成Condition中的await signal signalAll。Condition 将 Object 监视器方法(wait、notify 和 notifyAll)分解成截然不同的对象,以便通过将这些对象与任意 Lock 实现组合使用.
import java.util.concurrent.locks.*;
class ProducerConsumerDemo1
{
public static void main(String[] args)
{
Resource res=new Resource();
Producer pro=new Producer(res);
Consumer con=new Consumer(res);
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();
Condition conditionPro=lock.newCondition();
Condition conditionCon=lock.newCondition();
public void set(String name)
{
lock.lock();
try
{
while(flag)
{
conditionPro.await();
}
this.name=name+"--"+count++;
System.out.println(Thread.currentThread().getName()+" 生产者。。。。"+this.name);
flag=true;
conditionCon.signal();//唤醒
}
catch(InterruptedException e){}
finally
{
lock.unlock();
}
}
public synchronized void out()
{
lock.lock();
try
{
while(!flag)
{
conditionCon.await();
}
System.out.println(Thread.currentThread().getName()+" 消费者。。。。。。。"+name);
flag=false;
conditionPro.signal();//唤醒
}
catch (InterruptedException e)
{
}
finally
{
lock.unlock();
}
}
}
class Producer implements Runnable
{
Resource res;
public Producer(Resource res)
{
this.res=res;
}
public void run()
{
while(true)
{
res.set("商品+");
}
}
}
class Consumer implements Runnable
{
Resource res;
public Consumer(Resource res)
{
this.res=res;
}
public void run()
{
while(true)
{
res.out();
}
}
}
分享到:
相关推荐
《良葛格Java JDK 5.0学习笔记》是一份专为初学者设计的Java编程教程,旨在帮助读者深入理解JDK 5.0版本中的关键特性与概念。这份PDF文档详细介绍了Java语言的基础语法、核心类库以及新引入的特性和改进。以下是这份...
在JDK 5.0中,Java的并发编程能力得到了显著增强,引入了更加灵活和可伸缩的锁定机制。这一变化主要是为了提高并发应用程序的性能,并为开发者提供了更多的控制选项。这里我们将深入探讨其中的关键知识点——`...
JDK5.0后Java提供了一种更加强大的线程同步机制。一种显式定义同步锁对象来实现锁,提供了对共享资源的独占访问,每次只能有一个线程对Lock对象加锁,线程开始访问共享资源之前应先获得Lock锁。 # synchronized锁与...
在JDK 5.0中,引入了大量并发改进,包括JVM级别的变化,如引入了Compare-and-Swap(CAS)指令,这是一种轻量级的并发原语,能够在硬件层面支持多线程对共享内存位置的无锁更新。这使得开发者能够创建高度可伸缩的并发...
`Lock` 接口是 JDK 5.0 引入的新特性之一,用于实现更高级别的锁机制。相比传统的 `synchronized` 关键字,`Lock` 提供了更多灵活的控制能力。 **主要特点**: - **可重入性**:支持可重入锁定,允许多次锁定同一个...
2.3 JDK5.0的LOCK 自JDK 5.0起,引入了更高级的并发控制机制,如`java.util.concurrent.locks.ReentrantLock`,提供可中断的等待和公平锁等特性,比传统的`synchronized`关键字提供了更多的灵活性和控制。 **第3章...
多线程线程的生命周期线程的同步同步代码块处理实现Runnable的线程安全问题同步代码块处理继承Thread类的线程安全问题同步方法处理实现Runnable的线程安全问题同步方法处理继承Thread类的线程安全问题线程安全的单例...
9. **JDK5.0新增线程创建方式**: - 使用`ExecutorService`和`Callable`接口来创建和管理线程池。 - 使用`FutureTask`类来包装一个`Callable`对象,并将其提交到`ExecutorService`中执行。 #### 二、企业真题解析...
在JDK 1.5及以后的版本中,Java引入了`java.util.concurrent`包,其中包含了一些强大的并发工具类,如`Lock`接口和`Condition`接口,这些工具大大提升了生产者消费者模式的实现效率和线程安全性。 生产者消费者模式...
- 当线程中抛出未捕获的异常时,可以设置一个自定义的Thread.UncaughtExceptionHandler来处理。 - 通过设置线程的setUncaughtExceptionHandler方法来指定异常处理器。 3. **线程组ThreadGroup** - Java允许将...
- **线程模型的增强**:JDK 5.0之后引入了更高级的并发工具类,如`ConcurrentHashMap`等。 #### 三、集合框架 - **概述**:Java集合框架提供了一组接口和实现类,用于存储和操作对象集合。 - **Collection接口**:...
从JDK5.0开始,ThreadLocal增加了对泛型的支持,类名变更为`ThreadLocal<T>`,并相应地调整了API方法,包括`void set(T value)`、`T get()`以及`T initialValue()`,进一步增强了代码的类型安全性和可读性。...
Java的ReentrantLock是Java并发编程中非常重要的一个同步机制,它是JDK 5.0引入的并发包`java.util.concurrent.locks`中的一个高级锁,提供了比synchronized更细粒度的控制,同时具备更高的灵活性和性能。...
然而,从Java 5.0开始,JDK引入了ReentrantLock,这是一种更强大的可重入锁,提供了比synchronized更丰富的功能。ReentrantLock不仅具备与synchronized相同的互斥和可重入特性,还提供了更多的灵活性和控制性。 **...
5. **并发与多线程**:讲解了Java的线程模型、同步机制(synchronized、volatile、Lock等),以及并发工具类的使用。 6. **性能调优**:包括如何监控和分析JVM的运行状态,以及如何调整JVM参数以提高程序性能。 ...
理解线程同步、互斥和死锁的概念,以及synchronized关键字和Lock接口的应用,对于编写高效并发程序至关重要。 7. **网络编程**:Java的Socket编程允许开发网络应用程序,如客户端/服务器模型。理解TCP和UDP协议,...
- **性能**:JDK 5.0之后,synchronized进行了大量优化,但在某些场景下ReentrantLock仍然具有性能优势。 - **使用场景**:synchronized适用于简单同步需求;ReentrantLock适用于复杂同步逻辑。 **3.2 为什么说...
- **JDK5.0新增类别**:`UncaughtExceptionHandler`处理未捕获异常,`Lock`和`Condition`提供更灵活的锁机制,`BlockingQueue`用于线程间的数据传递,`Callable`和`Future`提供异步计算结果,`Executors`提供线程池...
Java中的ReentrantLock是线程安全编程中的一种高级锁机制,它属于Lock接口的一个实现,提供了比synchronized更丰富的功能和更高的灵活性。ReentrantLock的名字来源于它的可重入性,这意味着一个线程可以多次获取同一...
全部代码出自电子工业出版社夏先波的《Java JDK实例宝典》一书,本书以J2SE 5.0为开发环境,选取Java应用的典型实例,循序渐进地介绍了Java语言的各种开发方法和技巧,实例代码注释详细规范,思路清晰。 第1章 ...