java 线程 轮询_JAVA多线程编中的轮询锁与定时锁

显示锁

Lock接口是Java 5.0新增的接口,该接口的定义如下:

与内置加锁机制不同的是,Lock提供了一种无条件的、可轮询的、定时的以及可中断的锁获取操作,所有加锁和解锁的方法都是显示的。ReentrantLock实现了Lock接口,与内置锁相比,ReentrantLock有以下优势:可以中断获取锁操作,获取锁时候可以设置超时时间。以下代码给出了Lock接口的标准使用形式:

1.1、轮询锁与定时锁

可定时的与可轮询的锁获取方式是由tryLock方法实现的,与无条件的锁获取方式相比,它具有跟完善的错误回复机制。tryLock方法的说明如下:

在内置锁中,死锁是一个严重的问题,恢复程序的唯一方法是重新启动程序,而防止死锁的唯一方法就是在构造程序时避免出现不一致的锁顺序,可定时的与可轮询的锁提供了另一种选择:先用tryLock()尝试获取所有的锁,如果不能获取所有需要的锁,那么释放已经获取的锁,然后重新尝试获取所有的锁,以下例子演示了使用tryLock避免死锁的方法:先用tryLock来获取两个锁,如果不能同时获取,那么就回退并重新尝试。

1.2、可中断的锁获取操作

lockInterruptibly方法能够在获得锁的同时保持对中断的响应,该方法说明如下:

1.3、读-写锁

Java 5除了增加了Lock接口,还增加了ReadWriteLock接口,即读写锁,该接口定义如下:

读写锁允许多个读线程并发执行,但是不允许写线程与读线程并发执行,也不允许写线程与写线程并发执行。下面的例子

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中发起轮询调用可以使用多线程定时器的方式实现。下面是一个基本示例: 1. 使用多线程方式发起轮询调用: ```java public class PollingThread extends Thread { private boolean running = true; @Override public void run() { while (running) { // 执行轮询任务的代码 // 可以在这里进行需要轮询的操作,比如发送请求、处理数据等 try { Thread.sleep(1000); // 每隔1秒执行一次轮询 } catch (InterruptedException e) { e.printStackTrace(); } } } public void stopPolling() { running = false; } } // 在某个地方创建并启动轮询线程 public static void main(String[] args) { PollingThread pollingThread = new PollingThread(); pollingThread.start(); // 一段时间后停止轮询 try { Thread.sleep(5000); // 暂停5秒 } catch (InterruptedException e) { e.printStackTrace(); } pollingThread.stopPolling(); } ``` 2. 使用定时器方式发起轮询调用: ```java import java.util.Timer; import java.util.TimerTask; public class PollingTimerTask extends TimerTask { private int count = 0; @Override public void run() { // 执行轮询任务的代码 // 可以在这里进行需要轮询的操作,比如发送请求、处理数据等 count++; if (count >= 5) { // 定时器执行5次后停止轮询 this.cancel(); } } } // 在某个地方创建并启动定时器 public static void main(String[] args) { Timer timer = new Timer(); timer.schedule(new PollingTimerTask(), 0, 1000); // 每隔1秒执行一次轮询 // 一段时间后停止轮询 try { Thread.sleep(5000); // 暂停5秒 } catch (InterruptedException e) { e.printStackTrace(); } timer.cancel(); } ``` 以上是两种常见的发起轮询调用的方式,根据实际需求选择适合的方式进行实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值