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-200SMART是西门子推出的一款小型PLC(可编程逻辑控制器),它在工业自动化领域广泛应用。Modbus则是一种开放的通信协议,允许不同设备之间进行数据交换。本篇文章将深入探讨S7-200SMART如何利用Modbus轮询技术...
《S7-200 SMART MODBUS轮询程序详解与应用指南》 在工业自动化领域,西门子的S7-200 SMART系列PLC因其小巧、灵活、功能强大而受到广泛应用。MODBUS通信协议作为工业设备间通信的通用标准,使得不同厂商的设备能够...
标题中的"S7-200PLC-Modbus RTU通信轮询-主站读写程序示例"指的是使用Siemens S7-200系列的PLC通过Modbus RTU协议实现通信轮询功能的主站读写程序实例。在工业自动化系统中,S7-200 PLC是一款广泛应用的小型PLC,而...
STM32CUBEIDE(9)----双ADC轮询模式扫描多个通道 CSDN文字教程:https://blog.csdn.net/qq_24312945/article/details/125747527 B站教学视频:https://www.bilibili.com/video/BV1ZB4y187h6
西门子plc300系列 cp341 多站点进行轮询 485
2. **全面的API**:USB4Java提供了一套完整的Java API,涵盖了USB设备的所有功能,包括枚举设备、打开和关闭设备、读写数据、管理配置和接口、处理中断和块传输等。 3. **事件驱动模型**:通过使用异步事件处理机制...
S7-200 PLC(可编程逻辑控制器)是西门子的一款小型PLC,广泛应用在工业自动化领域。Modbus是一种通用的通信协议,使得不同厂商的设备能够相互通信。本文将详细介绍如何在S7-200 PLC上实现与Modbus通讯的轮询程序。 ...
因此,当写请求到来时,程序会中断当前的读轮询,优先处理写操作,然后再恢复读取任务。 为了充分利用这个轮询程序,你需要熟悉S7-200SMART的编程环境,如Step 7 Micro/WIN SMART软件。在该软件中,你可以编写、...
第11周1-第04章节-Python3.5-RabbitMQ消息分发轮询.mp4
在Python编程中,轮询和回调是两种常见的异步编程技术,它们在处理网络请求、数据获取和事件驱动编程中发挥着重要作用。本项目“Python-Python实现的轮询和回调API包”提供了一个专门的Python包,旨在简化这类任务的...
标题中的“一个轮询的Java案例”提示我们这个话题与编程中的轮询机制有关,而描述则提供了一个有趣的比喻,用以解释轮询的过程。在这个比喻中,20个人代表了程序中的多个参与者,3包降落伞相当于有限的资源,每数到...
对于通讯轮询时出现的异常,需要设计合适的检测机制,避免轮询过程出现中断或卡死。异常检测需要能够应对设备在启动时发送的非标准MODBUS报文,这些报文会导致PLC执行错误或者校验失败。 对于程序的扩展性,设计时...
总的来说,这份资源对于学习和理解如何在S7-200SMART PLC中利用MODBUS通信和基本的定时、计数功能进行设备轮询非常有帮助。使用者可以通过查看和分析代码,深入理解MODBUS通信协议在实际应用中的实现细节,以及如何...
YDOS-数组方式实现轮询时间片 基于ucosII 的简单任务调度实现 ,有相同任务优先级下的轮询,每个任务优先级可以一样 这种实现方式不是官方的用任务控制空的双向链表实现的 YDOS 嗯,以我的名字命名的,来源于...
相反,负轮询事件(也称为中断或异步事件)是当设备有新数据或服务请求时主动通知系统,这种方式更节省资源,但可能延迟响应时间。 自适应轮询技术结合了两者的优势,根据网络条件和设备状态动态调整轮询策略。系统...
轮询服务是网络通信中一种常用的技术,它是指客户端周期性地向服务器发送请求,检查是否有新的数据或者状态更新。在海关跨境电商系统中,轮询服务可能用于实时获取进口货物的数据,如订单状态、物流信息等。轮询虽然...
本教程将深入讲解如何在西门子S7-1200 PLC(可编程逻辑控制器)上实现基于Modbus RTU的主从通信,特别是主站轮询多从站以及从站故障处理策略。 首先,理解Modbus RTU协议的基础至关重要。Modbus是一种公开的通信...
Java-Comet是一种在Java平台上实现的长轮询(Comet)技术,它主要用于实现实时Web通信。Comet技术允许服务器向客户端推送数据,而不仅仅是响应客户端的请求,这在构建实时应用如聊天室、股票报价、在线游戏等场景中...
在电信行业中,多链路轮询方法、设备和数据通信系统是提高网络性能和可靠性的关键技术之一。这一技术主要用于优化网络资源的分配和管理,确保数据传输的高效性和稳定性。以下将详细介绍这些概念及其相关知识点。 一...
这种设计巧妙地结合了定时和条件判断,确保了读操作的正常轮询,同时允许写操作在满足特定条件时优先执行,提高了系统的灵活性和响应性。这种方法尤其适用于实时性要求较高的应用场景,比如设备状态改变需要立即响应...