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)
上一篇 2022年10月16日 上午11:00
下一篇 2022年10月16日 上午11:00


相关推荐

  • Landsat8遥感数据大气校正

    Landsat8遥感数据大气校正LaSRC Landsat8Surf 是 USGS 专门为 Landsat8 数据设计的大气校正程序 被认为是最精确的 Landsat8OLI 大气校正 最近更新为 2017 年 12 月 LaSRC 有很大的技术改进包括短波蓝光的应用和使用逐日的大气环境辅助数据 lasrc product guide pdf 但 USGS 仅提供美国境内的 LaSRC 产品 对境外提供的 Lan

    2026年3月16日
    2
  • Gliffy Diagrams 安装问题

    Gliffy Diagrams 安装问题由于网络问题 Chrome 插件不能在线安装 只能选择离线安装 但是在安装过程中 CRX 文件总是报 CRX REQUIRED PROOF MISSING 和 CRX HEADER INVALID 两个错误 折腾了一会发现是自己理解问题 所以记录下方便下次使用 文件下载 gliffy 文件 https pan baidu com s 1r6PaEO5Gm0q 密码 bcaj 1

    2026年3月17日
    2
  • Hash冲突的四种解决办法

    Hash冲突的四种解决办法一 哈希表简介非哈希表的特点 关键字在表中的位置和它之间不存在一个确定的关系 查找的过程为给定值一次和各个关键字进行比较 查找的效率取决于和给定值进行比较的次数 nbsp nbsp 哈希表的特点 关键字在表中位置和它之间存在一种确定的关系 哈希函数 一般情况下 需要在关键字

    2026年3月26日
    1
  • 协方差的意义

    协方差的意义

    2021年12月8日
    50
  • mvc3_bootstrap和数据库交互

    mvc3_bootstrap和数据库交互对于MVC的编程,主要应该先了解M(模型)-V(视图)-C(控制器)的相关概念,并进而理解相关的框架类别及操作方法.

    2026年4月18日
    8
  • 理解 Python 的 for 循环

    理解 Python 的 for 循环在本篇博客中 我们将讨论 Python 中 for 循环的原理 我们将从一组基本例子和它的语法开始 还将讨论与 for 循环关联的 else 代码块的用处 然后我们将介绍迭代对象 迭代器和迭代器协议 还会学习如何创建自己的迭代对象和迭代器 之后 我们将讨论如何使用迭代对象和迭代器实现 for 循环 以及利用 while 循环通过迭代器协议实现 for 循环逻辑 最后 我们将反编译一

    2026年3月26日
    2

发表回复

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

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