`
uusoft
  • 浏览: 11060 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

JDK 5.0中的Lock实现线程同步

    博客分类:
  • j2se
 
阅读更多

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学习笔记》是一份专为初学者设计的Java编程教程,旨在帮助读者深入理解JDK 5.0版本中的关键特性与概念。这份PDF文档详细介绍了Java语言的基础语法、核心类库以及新引入的特性和改进。以下是这份...

    JDK 5.0 中更灵活、更具可伸缩性的锁定机制1

    在JDK 5.0中,Java的并发编程能力得到了显著增强,引入了更加灵活和可伸缩的锁定机制。这一变化主要是为了提高并发应用程序的性能,并为开发者提供了更多的控制选项。这里我们将深入探讨其中的关键知识点——`...

    lock锁,lock锁和synchronized的对比

    JDK5.0后Java提供了一种更加强大的线程同步机制。一种显式定义同步锁对象来实现锁,提供了对共享资源的独占访问,每次只能有一个线程对Lock对象加锁,线程开始访问共享资源之前应先获得Lock锁。 # synchronized锁与...

    java 多线程同步

    在JDK 5.0中,引入了大量并发改进,包括JVM级别的变化,如引入了Compare-and-Swap(CAS)指令,这是一种轻量级的并发原语,能够在硬件层面支持多线程对共享内存位置的无锁更新。这使得开发者能够创建高度可伸缩的并发...

    Java多线程-避免同步机制带来的死锁问题及用Lock锁解决线程安全问题

    `Lock` 接口是 JDK 5.0 引入的新特性之一,用于实现更高级别的锁机制。相比传统的 `synchronized` 关键字,`Lock` 提供了更多灵活的控制能力。 **主要特点**: - **可重入性**:支持可重入锁定,允许多次锁定同一个...

    java thread 分析

    2.3 JDK5.0的LOCK 自JDK 5.0起,引入了更高级的并发控制机制,如`java.util.concurrent.locks.ReentrantLock`,提供可中断的等待和公平锁等特性,比传统的`synchronized`关键字提供了更多的灵活性和控制。 **第3章...

    Java学习路线:day19

    多线程线程的生命周期线程的同步同步代码块处理实现Runnable的线程安全问题同步代码块处理继承Thread类的线程安全问题同步方法处理实现Runnable的线程安全问题同步方法处理继承Thread类的线程安全问题线程安全的单例...

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

    9. **JDK5.0新增线程创建方式**: - 使用`ExecutorService`和`Callable`接口来创建和管理线程池。 - 使用`FutureTask`类来包装一个`Callable`对象,并将其提交到`ExecutorService`中执行。 #### 二、企业真题解析...

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

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

    JavaThread.pdf

    - 当线程中抛出未捕获的异常时,可以设置一个自定义的Thread.UncaughtExceptionHandler来处理。 - 通过设置线程的setUncaughtExceptionHandler方法来指定异常处理器。 3. **线程组ThreadGroup** - Java允许将...

    最新JDK教程(CHM版)

    - **线程模型的增强**:JDK 5.0之后引入了更高级的并发工具类,如`ConcurrentHashMap`等。 #### 三、集合框架 - **概述**:Java集合框架提供了一组接口和实现类,用于存储和操作对象集合。 - **Collection接口**:...

    ThreadLocal详解

    从JDK5.0开始,ThreadLocal增加了对泛型的支持,类名变更为`ThreadLocal<T>`,并相应地调整了API方法,包括`void set(T value)`、`T get()`以及`T initialValue()`,进一步增强了代码的类型安全性和可读性。...

    Java多线程ReentrantLock1

    Java的ReentrantLock是Java并发编程中非常重要的一个同步机制,它是JDK 5.0引入的并发包`java.util.concurrent.locks`中的一个高级锁,提供了比synchronized更细粒度的控制,同时具备更高的灵活性和性能。...

    21 更高级的锁—深入解析Lock.pdf

    然而,从Java 5.0开始,JDK引入了ReentrantLock,这是一种更强大的可重入锁,提供了比synchronized更丰富的功能。ReentrantLock不仅具备与synchronized相同的互斥和可重入特性,还提供了更多的灵活性和控制性。 **...

    java jdk6.0源码+深入java虚拟机第二版

    5. **并发与多线程**:讲解了Java的线程模型、同步机制(synchronized、volatile、Lock等),以及并发工具类的使用。 6. **性能调优**:包括如何监控和分析JVM的运行状态,以及如何调整JVM参数以提高程序性能。 ...

    java JDK 实例开发宝典

    理解线程同步、互斥和死锁的概念,以及synchronized关键字和Lock接口的应用,对于编写高效并发程序至关重要。 7. **网络编程**:Java的Socket编程允许开发网络应用程序,如客户端/服务器模型。理解TCP和UDP协议,...

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

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

    java学习笔记(下)

    - **JDK5.0新增类别**:`UncaughtExceptionHandler`处理未捕获异常,`Lock`和`Condition`提供更灵活的锁机制,`BlockingQueue`用于线程间的数据传递,`Callable`和`Future`提供异步计算结果,`Executors`提供线程池...

    Java中ReentrantLock的使用.docx

    Java中的ReentrantLock是线程安全编程中的一种高级锁机制,它属于Lock接口的一个实现,提供了比synchronized更丰富的功能和更高的灵活性。ReentrantLock的名字来源于它的可重入性,这意味着一个线程可以多次获取同一...

    Java JDK实例宝典

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

Global site tag (gtag.js) - Google Analytics