java trylock_lock.tryLock()方法的使用

java trylock_lock.tryLock()方法的使用packageconcurrent;importjava.util.ArrayList;importjava.util.List;importjava.util.concurrent.locks.Lock;importjava.util.concurrent.locks.ReentrantLock;publicclassTestTryLock{privateListlist=…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

package concurrent;

import java.util.ArrayList;

import java.util.List;

import java.util.concurrent.locks.Lock;

import java.util.concurrent.locks.ReentrantLock;

public class TestTryLock {

private List list = new ArrayList();

private Lock lock = new ReentrantLock();

public static void main(String[] args) {

final TestTryLock test = new TestTryLock();

new Thread(“第一个线程 “) {

@Override

public void run() {

test.doSomething(Thread.currentThread());

}

}.start();

new Thread(“第二个线程 “) {

@Override

public void run() {

test.doSomething(Thread.currentThread());

}

}.start();

}

public void doSomething(Thread thread) {

if (lock.tryLock()) {

try {

System.out.println(thread.getName() + “得到了锁.”);

for (int i = 0; i < 10; i++) {

list.add(i);

}

} catch (Exception e) {

e.printStackTrace();

} finally {

System.out.println(thread.getName() + “释放了锁.”);

lock.unlock();

}

} else {

System.out.println(thread.getName() + “获取锁失败.”);

}

}

}

以上代码运行结果如下:

第一个线程 得到了锁.

第一个线程 释放了锁.

第二个线程 得到了锁.

第二个线程 释放了锁.

package concurrent;

import java.util.ArrayList;

import java.util.List;

import java.util.concurrent.locks.Lock;

import java.util.concurrent.locks.ReentrantLock;

public class TestTryLock {

private List list = new ArrayList();

private Lock lock = new ReentrantLock();

public static void main(String[] args) {

final TestTryLock test = new TestTryLock();

new Thread(“第一个线程 “) {

@Override

public void run() {

test.doSomething(Thread.currentThread());

}

}.start();

new Thread(“第二个线程 “) {

@Override

public void run() {

test.doSomething(Thread.currentThread());

}

}.start();

}

public void doSomething(Thread thread) {

if (lock.tryLock()) {

try {

System.out.println(thread.getName() + “得到了锁.”);

for (int i = 0; i < 10; i++) {

list.add(i);

Thread.sleep(10);

}

} catch (Exception e) {

e.printStackTrace();

} finally {

System.out.println(thread.getName() + “释放了锁.”);

lock.unlock();

}

} else {

System.out.println(thread.getName() + “获取锁失败.”);

}

}

}

运行结果如下:

第二个线程 得到了锁.

第一个线程 获取锁失败.

第二个线程 释放了锁.

问题如下:

我知道lock()方法去获取锁,当获取不到锁的时候,会一直等待。直到获取到锁。

tryLock()方法获取锁的时候,制作一次试探,如果获取锁失败,就不会一直等待的。如果是这样的话,如我Demo所示的这样,在业务逻辑中使用tryLock很容易造成程序不可控。比较疑惑这个tryLock的使用方法。。求大神解释。。谢谢~~

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/181422.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号