- 浏览: 73901 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
springdata-jpa:
java quartz定时任务demo教程源代码下载,地址:h ...
Quartz java实例解析,web应用 -
jsjxieyang:
还是不行啊,始终报错
aop导入包注意事项
package star20110715; 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 WaxOMatic2 { public static void main(String[] args) throws InterruptedException{ Car car = new Car(); ExecutorService executorService = Executors.newCachedThreadPool(); executorService.execute(new waxOn(car)); executorService.execute(new Buffer(car)); TimeUnit.SECONDS.sleep(30); executorService.shutdownNow(); } } class Car{ private Lock lock = new ReentrantLock(); private Condition condition = lock.newCondition(); private boolean waxOn = false; public void waxed(){ lock.lock(); try { waxOn = true; System.err.println("正在打蜡"); condition.signalAll(); } finally{ lock.unlock(); } } public void buffered(){ lock.lock(); try { waxOn = false; System.err.println("正在抛光"); condition.signalAll(); } finally{ lock.unlock(); } } public void waitWax() throws InterruptedException{ lock.lock(); try { while(waxOn == false){ condition.await(); } } finally{ lock.unlock(); } } //如果车子现在已经打蜡了,那么车子现在就要等待啊。 public void waitBuffer() throws InterruptedException{ lock.lock(); try { while(waxOn == true){ condition.await(); } } finally{ lock.unlock(); } } } class waxOn implements Runnable{ private Car car; public waxOn(Car car) { this.car = car; } @Override public void run() { try { while(!Thread.interrupted()){ System.out.println("开始打蜡"); car.waxed(); TimeUnit.SECONDS.sleep(3); car.waitBuffer(); } } catch (InterruptedException e) { System.out.println("打蜡结束"); } } } class Buffer implements Runnable{ private Car car; public Buffer(Car car) { this.car = car; } @Override public void run() { try { while(!Thread.interrupted()){ car.waitWax(); System.out.println("开始抛光"); car.buffered(); TimeUnit.SECONDS.sleep(3); } } catch (InterruptedException e) { System.out.println("抛光结束"); } } }
发表评论
-
memcached 使用
2014-10-29 14:47 6551.起因,支付项目中将订单 order 信息记入到se ... -
rank() over
2014-09-03 11:14 659查询同一个用户下,最近时间订购(最近一次操作) 的集合 ... -
Jad 使用
2013-01-06 15:00 813关于jad的使用 1 下载对应的包 2.将net.sf.j ... -
JAVA 环境变量
2012-11-12 10:17 01.打开我的电脑--属性--高级--环境变量 2 ... -
工作中的递归应用
2012-09-28 08:58 0递归应用 //递归获得参数列表 privat ... -
java反编译
2012-09-24 16:48 0给力 MyEclipse6.5的反编译插件的安装 我的 ... -
环境变量设置
2012-09-24 16:47 0给力 1.打开我的电脑--属性--高级--环境变量 ... -
tomczt
2012-06-11 07:59 0111 -
界面获取值,相关方法
2012-04-20 21:13 999EL(Excepress Language表达式语 ... -
JNDI 学习地址
2012-02-16 16:53 0JNDI 学习地址 http://docs.oracle.c ... -
xml解析2
2012-01-17 17:19 0xml解析2 public static bo ... -
xml解析1
2012-01-17 17:19 0xml解析 /*jadclipse*/// De ... -
Oracle 分页查询,图片
2011-12-26 23:28 0Oracle 分页查询 package oracle; ... -
压缩文件
2011-12-26 15:10 0压缩文件 package nio.channeltest; ... -
GZIPcompress NIO 压缩文件
2011-12-26 15:08 1NIO 压缩文件 package nio.chan ... -
OIO NIO ,输入输出性能测试
2011-12-26 10:13 0OIO NIO ,输入输出性能测试 package ... -
222
2011-12-21 13:03 02 /** * 解析xml文件 * ... -
XMLRead 字符字节流的读取
2011-12-21 13:02 0XMLRead 字符字节流的读取 package Te ... -
XMLUtil2
2011-12-20 11:16 0XMLUtil2 /** * 创建用户列表信息 ... -
XMLUtil
2011-12-20 11:15 0XMLUtil package com.star.ch ...
相关推荐
- 使用Lock类时,我们需要显式调用`lock()`方法获取锁,`unlock()`方法释放锁,这使得我们可以将锁操作与其他业务逻辑分开,增加了代码的可读性和可维护性。 - Lock类的一个显著优点是它可以支持多个条件变量,即...
1. **代码简洁性**:synchronized关键字的使用更为简洁,只需将其应用于方法或代码块,而Lock接口需要显式地获取和释放锁,代码相对复杂。 2. **中断性**:synchronized无法中断正在等待锁的线程,而Lock接口提供了`...
为了提供更灵活的锁控制,Java引入了Lock接口,它是显式锁的代表,允许我们执行更复杂的操作,如中断锁获取、超时获取和尝试获取等。ReentrantLock是Lock接口的一个具体实现,它支持可重入性,即一个线程可以多次...
使用`Lock`接口的一个重要优点是可以显式地获取和释放锁,这使得代码更具有可读性和可控性。例如,我们可以使用`try-with-resources`语句确保锁在使用完毕后总是被正确释放: ```java Lock lock = ...; // 初始化...
**显式条件队列**,通常与显式锁配合使用,如`java.util.concurrent.locks.Condition`接口。条件队列允许线程等待特定条件满足后再继续执行,而不是简单地等待锁的释放。条件队列的线程等待和唤醒是通过`Condition`...
而Lock接口(如ReentrantLock)提供了更高级的同步控制,具有更高的灵活性和控制性,但使用起来相对复杂。选择哪种机制取决于具体的应用场景和需求,如性能、可读性、可维护性等因素。在理解和掌握这两种同步方式的...
2. **非块结构**:使用Lock时,我们不需要像`synchronized`那样包围整个代码块,而是需要在适当的地方显式调用`lock()`和`unlock()`方法。 3. **可中断性**:Lock的`lockInterruptibly()`方法允许在等待锁时响应中断...
显式游标需要在DECLARE部分声明,并通过OPEN、FETCH、CLOSE等语句来管理和使用。以下是一个基本的显式游标示例: ```sql DECLARE cursor_name CURSOR FOR SELECT column1, column2 FROM table_name WHERE ...
`Lock` 接口中定义了 `lock()` 和 `unlock()` 方法来显式地控制锁的获取和释放,还提供了 `tryLock()` 方法尝试获取锁而不阻塞线程。 **示例代码:** ```java Lock lock = new ReentrantLock(); lock.lock(); try {...
内置锁的使用非常方便,不需要显式的获取和释放,任何一个对象都能作为一把内置锁。内置锁的使用可以解决大部分的同步场景。但是,内置锁也存在一些局限性,例如无法设置超时时间、无法中断线程等。 显式锁...
- **条件变量(Condition)**:Lock接口提供了一个Condition接口,可以创建多个条件变量,比`synchronized`的wait/notify机制更灵活。 3. 其他同步工具类: - **Semaphore**:信号量,可以控制同时访问特定资源的...
6. `newCondition()`:创建一个与该`Lock`实例相关联的`Condition`对象,用于线程间的通信和同步。 `ReentrantLock`是`Lock`接口的实现,它具有可重入性,意味着一个线程可以多次获取同一锁,只要该线程未释放所有...
1. **使用方式**:`synchronized`是隐式同步,无需手动释放,而`Lock`是显式同步,需手动调用`lock()`和`unlock()`。 2. **控制能力**:`Lock`提供了更多控制选项,如可中断、可选择公平性、锁分离等。 3. **异常...
6. `Condition newCondition()`: 创建一个条件变量,用于控制线程等待和唤醒,这是Lock接口的重要特性之一。 ReentrantLock是Lock接口的主要实现类,具备可重入性,即线程已经持有了锁,可以再次获取而不被阻塞。这...
在PL/SQL中,INSERT、UPDATE、DELETE和LOCK TABLE等DML语句与SQL中的语法相同,但可以更方便地结合变量使用。例如,在上面的FIRE_EMPLOYEE过程示例中,先查询然后插入、删除和更新数据。 6. DML语句的结果 DML语句...
2. **锁定和解锁**:使用`lock()`和`unlock()`方法控制互斥锁的获取和释放。在使用条件变量之前,必须先持有互斥锁。 3. **等待和通知**:`wait()`函数会让线程进入等待状态,直到其他线程调用`notify_one()`或`...
本文将深入探讨Oracle游标的使用,包括显式和隐式游标,以及它们在DML语句中的应用。 首先,当我们使用SELECT语句在PL/SQL中查询数据时,通常需要结合INTO子句,将查询结果存储到预声明的变量中。例如,`SELECT ...