1、从JAVA5.0开始,提供了新的选择:ReentrantLock。
2、可定时和可轮询的锁获取模式由tryLock方法实现。
3、使用tryLock试图获得的锁如果不能同时获得,就回退,并重新尝试。休眠时间由一个特定组件管理。(下面的代码完成转帐)
public boolean transferMoney(Account fromAcct,AccounttoAcct,DollarAmonunt amount,long timeout,TimeUnit unit)
throwsInsufficientFundsException,InterruptedException{
longfixedDelay=getFixedDelayComponentNanos(timeout,unit);
longrandMod=getRandomDelayModulusNanos(timeout,unit);
longstopTime=System.nanoTime()+unit.toNanos(timeout);
while (true){
if (fromAcct.lock.tryLock()){
try{
if(toAcct.lock.tryLock()){
try {
if (fromAcct.getBalance().compareTo(amount)<0)
thrownew InsufficientFundsException();
else {
fromAcct.debit(amount);
toAcct.credit(amount);
returntrue;
}
}finally{toAcct.lock.unlock();}
}
}finally{fromAcct.lock.unlock();}
}
}
if(System.nanoTime()<stopTime) return false;
NANOSECONDS.sleep(fixedDelay+rnd.nextLong()%randMod);
}
4、具有时间限制的活动,定时锁同样有用.超时后程序提前返回.
public boolean trySendOnSharedLine(String message,longtimeout,TimeUnit unit)
throwsInterruptedException{
longnanosToLock=unit.toNanos(timeout)-estimatedNanosToSend(message);
if (!lock.tryLock(nanosToLock,NANOSECONDS)) return false;
try{
return sendOnSharedLine(message);
}finally{lock.unlock();}
}
5、一个可中断的锁可以响应中断,能取消。
public boolean sendOnSharedLine(Stringmessage)
throws InterruptedException{
lock.lockInterruptibly();
try{
return cancellableSendOnSharedLine(message);
}finally{
lock.unlock();
}
}
private boolean cancellableSendOnSharedLine(String message)
throwsInterruptedException{...}
}
转http://deepfuture.iteye.com/blog/599557
相关推荐
S7-200 SMART MODBUS轮询程序的示例及具体使用方法的解释说明
STM32CUBEIDE(9)----双ADC轮询模式扫描多个通道 CSDN文字教程:https://blog.csdn.net/qq_24312945/article/details/125747527 B站教学视频:https://www.bilibili.com/video/BV1ZB4y187h6
S7-200-modbus-通讯轮询程序
S7-200SMART_modbusRTU轮询程序(读轮询+写优先)附使用说明
S7-200SMART Modbus轮询应用库(使用说明+库文件)
S7-200PLC_Modbus RTU通信轮询_主站读写程序示例
第11周1-第04章节-Python3.5-RabbitMQ消息分发轮询.mp4
西门子plc300系列 cp341 多站点进行轮询 485
电信设备-基于正和负轮询事件提供自适应轮询的通信系统和相关方法.zip
电信设备-多链路轮询方法、设备和数据通信系统.zip
YDOS-数组方式实现轮询时间片 基于ucosII 的简单任务调度实现 ,有相同任务优先级下的轮询,每个任务优先级可以一样 这种实现方式不是官方的用任务控制空的双向链表实现的 YDOS 嗯,以我的名字命名的,来源于...
S7-200SMART_modbus轮询源程序(定时器+计数器方式)-仅需一个MSG指令
#资源达人分享计划#
multi-worker HTTP发布/订阅流 接收通过HTTP POST的任意实时数据 将它传递给所有实时等待相同密钥的HTTP GET客户端 可用于MPEG-TS直播或HTTP推送
S7-200SMART PLC进行MODBUS通信轮询卡死时重新开启轮询的具体方法演示
Python 实现的轮询和回调 API 包装-发现一个单独的 Python 包来处理简单的请求/查询, 能最大的简化代码, 鼓励大家多多尝试,将逻辑上去耦的接口独立出来!
单片机中断方式与轮询方式 单片机中断方式与轮询方式
一架飞机快要掉了,上面有 20 个人,但是只有 3 包降落伞。于是 20 个人凑成一圈,每数到第 7 个,就将他踢下去。 * 最后三包降落伞将落在哪几个人手里?
HTML5 WebSocket实现了...以前的服务器消息推送大部分采用的都是“轮询”和“长连接”技术,这两中技术都会对服务器产生相当大的开销,而且实时性不是特别高。WebSocket技术对只会产生很小的开销,并且实时性特别高
S7-200SMART_MODBUS RTU通信轮询中实现插队写入或条件写入的具体方法示例(1)