- 浏览: 74780 次
文章分类
最新评论
主要相同点:Lock能完成synchronized所实现的所有功能,同时 lock性能上高于synchronized
主要不同点:Lock有比synchronized更精确的线程语义和更好的性能。synchronized会自动释放锁,而Lock一定要求程序员手工释放,并且必须在finally从句中释放。
另外,Synchronized---对象加锁,Lock---基于栈中的框架,而不是具体的某个对象,只需要在栈里设置锁的开始和结束就行,不用关心大小对象的变化...、
主要不同点:Lock有比synchronized更精确的线程语义和更好的性能。synchronized会自动释放锁,而Lock一定要求程序员手工释放,并且必须在finally从句中释放。
另外,Synchronized---对象加锁,Lock---基于栈中的框架,而不是具体的某个对象,只需要在栈里设置锁的开始和结束就行,不用关心大小对象的变化...、
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class TestThread{ private final static Lock lock = new ReentrantLock(); private final static Condition produced = lock.newCondition(); private final Condition consumed = lock.newCondition(); boolean available = false; static int k=100; public static void main(String[] args){ /*lock.lock(); try{ for(int i=3;i>0;i--){ System.out.println("------"+i+"-----"); produced.await(3,TimeUnit.SECONDS); } } catch (InterruptedException e) { e.printStackTrace(); }finally{ lock.unlock(); }*/ final TestThread t = new TestThread(); Thread proTh = new Thread(){ public void run(){ try { t.produce(); } catch (InterruptedException e) { e.printStackTrace(); } } }; Thread cusTh = new Thread(){ public void run(){ try { t.consume(); } catch (InterruptedException e) { e.printStackTrace(); } } }; ExecutorService service = Executors.newCachedThreadPool(); service.submit(cusTh); for(int i=3;i>0;i--){ service.submit(proTh); } service.shutdown(); } /** * 生产者 * @throws InterruptedException */ public void produce() throws InterruptedException { lock.lock(); try { /*if(available){ // produced.await(); //放弃lock进入睡眠 System.out.println("-------------"); consumed.signal(); produced.await(); }*/ System.out.println("-----start------"); //consumed.signal(); // produced.await(10,TimeUnit.SECONDS); Thread.sleep(1000); //consumed.signal(); //发信号唤醒等待这个condition的线程 /*生产苹果*/ System.out.println("apple produced."); available = true; System.out.println("produce----->k="+k); k--; } finally { lock.unlock(); } } /** * 消费者 * @throws InterruptedException */ public synchronized void consume() throws InterruptedException { //lock.lock(); // try { /* if(!available){ System.out.println("1111111111"); produced.signal(); consumed.await();//放弃lock进入睡眠 //Thread.sleep(1000); }*/ // consumed.await(5,TimeUnit.SECONDS); Thread.sleep(5000); /*吃苹果*/ System.out.println("apple consumed."); available = false; //produced.signal();//发信号唤醒等待这个condition的线程 System.out.println("consume----->k="+k); k--; /* } finally { lock.unlock(); }*/ } }
发表评论
-
java调用js中写入的方法
2017-08-08 14:52 405ScriptEngineManager manager = n ... -
遍历object对象
2012-11-28 09:24 822如 {'name':'李大牛','age':'24'} 生 ... -
日期的使用
2012-11-23 18:23 7151.Calendar和date的转换 ca.setTime(d ... -
根据日期判断出星期
2012-11-14 16:48 643function getWeekString(date){ ... -
js Date转换成String
2012-09-28 11:25 1176Date.prototype.format = functio ... -
MessageFormat
2012-09-04 18:27 669MessageFormat用来格式化一个消息,通常是一个字符串 ... -
switch的参数类型
2012-08-20 14:56 934引用switch(expr1)中,expr1是一个整数表达式, ... -
String倒转
2012-08-20 10:54 782把string转换成byte数组,再按照一定的规则编译这个数组 ... -
String
2012-06-29 17:42 758String类是final的,不可被继承。public fin ... -
多线程示例
2012-06-14 12:23 753public class Test implements Ru ... -
List set和map
2012-06-06 11:10 805Collection ├List │├Linked ... -
数组和集合
2012-06-05 18:51 6801.数组和集合的定义 AType[ ] a=new ATy ... -
java线程
2012-05-15 18:27 6801.线程的定义 a.扩展java.lang.Thread类 ... -
操作xml文件
2012-05-03 13:48 7501. 介绍 1)DOM(JAXP Crimson解析 ... -
IO流的基本概念
2012-04-26 17:52 7721.基类 InputStream,OutputStream.都 ... -
文件的复制和删除
2012-04-26 17:37 678/** * 删除文件,通过文件的类型 * ...
相关推荐
在这个场景中,"生产者-消费者(lock和condition).zip"的文件内容可能包含一个使用Java语言实现的示例,它利用了`java.util.concurrent.locks.Lock`接口和`Condition`接口来解决这个问题。 `Lock`接口是Java并发库...
Java中的Lock类与Condition类是Java并发编程的重要组成部分,它们为多线程环境下的同步提供了更为灵活和强大的控制。在JDK 1.5及之后的版本中,Lock类作为替代synchronized关键字的一种方式出现,提供了更精细的锁...
本文将深入探讨JavaLock中的ReentrantLock(可重入锁)以及与其紧密相关的Condition接口,帮助你理解它们的工作原理和应用场景。 **一、ReentrantLock可重入锁** ReentrantLock是Java.util.concurrent.locks包下的...
使用Lock和Condition,生产者和消费者可以独立地控制何时进入等待状态,何时继续执行。当队列满时,生产者会调用condition.await()等待,直到消费者消费了一些数据并调用condition.signal();同样,当队列空时,消费...
6.4 使用Lock和Condition 6.5 使用volatile关键字 7. 线程通信: 7.1 使用wait()和notify()方法 7.2 使用Lock和Condition 8. 线程池: 8.1 线程池的概述 8.2 使用Executor框架创建线程池 8.3 线程池的优势和适用场景...
多线程编程的核心思想 多线程编程的核心思想是指在多线程环境下如何实现线程安全、...多线程编程的核心思想是通过 Lock 和 Condition 接口来实现线程安全和同步机制,并使用 AQS 底层实现来实现锁和 Condition 接口。
通过使用wait()、notify()和notifyAll(),或者Lock和Condition,开发者可以控制线程的执行顺序,确保共享资源的安全访问。 7. **死锁和活锁问题**: 使用wait/notify机制时,需要注意死锁和活锁问题。死锁发生在两...
本示例中,我们使用了Lock和Condition来实现生产者消费者模型,避免了使用synchronized关键字的方式,而是使用了Lock和Condition来实现线程同步和通信,提高了程序的性能和可读性。 知识点: * Java中的生产者消费...
在实际使用中,Lock和Condition的配合使用可以实现复杂的数据结构,例如生产者-消费者模型中的缓冲区,如示例代码中的BoundedBuffer类。它使用了ReentrantLock来保护共享状态,并通过Condition来控制生产者和消费者...
AQS是Java中解决同步和互斥问题的基础同步器,通过Lock和Condition两个接口来实现管程。Lock用于解决互斥问题,Condition用于解决同步问题。AQS的设计和实现是基于管程技术的,管程是解决同步和互斥问题的有效方法。...
而Condition接口则代表了一个条件变量,它被绑定到一个Lock对象上,并提供了一系列方法,例如await()、signal()和signalAll(),分别用于挂起当前线程、唤醒一个等待的线程以及唤醒所有等待的线程。 在上述提供的...
* lock 和 Condition 等同步机制 九、Web 开发 * HttpServlet、doGet、doPost 等 servlet 方法 * HttpServletRequest 和 HttpServletResponse 等 servlet 接口 * request.getParameter()、request.setAttribute() ...
多线程的实现方式包括继承Thread类和实现Runnable接口,面试中可能还会讨论线程同步和通信的方法,如wait、sleep、notify和notifyAll,以及线程间的共享变量、wait/notify机制、Lock和Condition等。 此外,面试中还...
1. 使用 Thread::Sleep 实现锁机制和条件变量:在这一部分中,需要修改 nachos-3.4/code/threads/synch.h 和 nachos-3.4/code/threads/synch.cc 文件,实现 Lock 和 Condition 类的接口声明和实现。 2. 使用 ...
Thread 基础知识点笔记总结 Thread 是 Java 中最...传统生产者消费者问题可以用 lock 和 condition 一起控制,用 condition 的 await()和 signal()对生产者和消费者进行等待和唤醒,保证生产一个数据消费一个数据。
这为构建更复杂的锁机制,如Semaphore、Lock和Condition提供了基础。 **内容二:任务完成情况** 实验3包括了以下几个Exercise: - Exercise1:实现了Semaphore的概念,包括P()和V()操作。P()操作中使用while循环和...
线程和线程同步是多线程编程的核心概念,Java提供了synchronized关键字、wait/notify机制以及更高级的Lock和Condition接口来保证并发安全。集合框架是Java中存储和操作数据的重要工具,包括List、Set、Map等,而迭代...
Java提供了丰富的线程同步机制来防止线程间的数据竞争问题,主要包括synchronized关键字、volatile变量、Lock和Condition接口、CountDownLatch、CyclicBarrier、Semaphore等。synchronized提供互斥访问,保证同一...