[英]Threads with no wait in Java
我在Java线程和并发方面有点新鲜。 我读过有关同步和锁定块的内容。 他们让其他线程等到第一个Thread完成它的工作。
我只想知道一种方法,如果THREAD A正在执行它,那么THREAD B不应该等待并跳过该共享代码块的执行。
线程B可以尝试通过Lock.tryLock
获取锁定。 如果它不可用,则线程B可以在检查后立即跳过“该共享代码块的执行”。
我只想知道一种方法,如果THREAD A正在执行它,那么THREAD B不应该等待并跳过该共享代码块的执行。
您可以使用Lock.tryLock()
的两个变体,一个尝试立即锁定给定时间段内的其他等待:
final Lock lock = new ReentrantLock();
new Thread(() -> {
boolean isAcquired = lock.tryLock();
System.out.println(Thread.currentThread().getName() + " acquired lock " + isAcquired);
sleep(10000); //acquires the lock and sleeps for 10 secs
}, "Thread A").start();
sleep(1000); //main thread sleep so that Thread A locks on the lock
new Thread(() ->{
try {
//will wait for 2 secs tops to acquire the lock
boolean isAcquired = lock.tryLock(2000, TimeUnit.MILLISECONDS);
System.out.println(Thread.currentThread().getName() + " acquired lock " + isAcquired);
}catch(InterruptedException ie){
ie.printStackTrace();
}
}, "Thread B").start();
输出:
Thread A acquired lock true
Thread B acquired lock false
在第一次使用中, tryLock()
不等待它尝试获取锁,如果它可以立即返回true
,否则它将返回false
。
在第二种用法tryLock(long time, TimeUnit unit)
将等待锁被释放的指示一段time
,然后获得并返回true
否则将返回false
或抛出InterruptedException
,如果它被中断。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.