繁体   English   中英

在Java中没有等待的线程

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM