lock的用法_try block

lock的用法_try blocktryLock有两个重载的方法,分别如下:booleantryLock();booleantryLock(longtime,TimeUnitunit)throwsInterruptedException;tryLock()会立马返回一个布尔值,如果获得了锁就返回false;如果没有获得锁就返回true。无论是返回true还是false,都会继续执行之后的代码。tryLock(longtime,TimeUnitunit)会等待指定的时间,如果时间到了还没获得锁就返

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

Jetbrains全系列IDE稳定放心使用

tryLock 有两个重载的方法,分别如下:

boolean tryLock();
boolean tryLock(long time, TimeUnit unit) throws InterruptedException;

tryLock() 会立马返回一个布尔值,如果获得了锁就返回 true;如果没有获得锁就返回 false。无论是返回 true 还是 false,都会继续执行之后的代码。

tryLock(long time, TimeUnit unit) 会等待指定的时间,如果时间到了还没获得锁就返回 false;如果在时间范围内获得了锁就立刻返回 true,不用等待时间结束。无论是返回 true 还是 false,都会继续执行之后的代码。

我们来拿第二个方法进行测试,代码如下:

public class T03_ReentrantLock3 { 
   
    Lock lock = new ReentrantLock();

    int count = 10;

    void m1() { 
   
        try { 
   
            lock.lock();
            for (int i = 0; i < count; i++) { 
   
                TimeUnit.SECONDS.sleep(1);
                System.out.println(i + 1);
            }
        } catch (InterruptedException e) { 
   
            e.printStackTrace();
        } finally { 
   
            lock.unlock();
        }
    }

    void m2() { 
   
        boolean tryLock = false;
        try { 
   
            // 尝试在 5 秒内获得锁
            tryLock = lock.tryLock(5, TimeUnit.SECONDS);
            System.out.println("m2..." + tryLock);
        } catch (Exception e) { 
   
            e.printStackTrace();
        } finally { 
   
            if (tryLock) { 
   
                lock.unlock();
            }
        }
    }

    public static void main(String[] args) throws InterruptedException { 
   
        T03_ReentrantLock3 reentrantLock3 = new T03_ReentrantLock3();
        new Thread(reentrantLock3::m1).start();
        TimeUnit.SECONDS.sleep(1);
        new Thread(reentrantLock3::m2).start();
    }
}

控制台输出如下:

1
2
3
4
5
6
m2...false
7
8
9
10

我们把变量 count 变为 2 再进行测试,控制台输出如下:

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

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

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


相关推荐

  • Clip Converter – 视频在线下载方法

    Clip Converter – 视频在线下载方法ClipConverter-视频在线下载方法YTtoMP4&MP3Converter!1.VideoURLtoDownloadhttps://www.clipconverter.cc/2.Continue3.Start

    2022年7月14日
  • 用PyTorch实现MNIST手写数字识别(非常详细)「建议收藏」

    hello大家好!我又来搬文章了!我就不信还有比这更详细的?!MNIST可以说是机器学习入门的helloword了!导师一般第一个就让你研究MNIST,研究透了,也算基本入门了。好的,今天就来扯一扯学一学。在本文中,我们将在PyTorch中构建一个简单的卷积神经网络,并使用MNIST数据集训练它识别手写数字。在MNIST数据集上训练分类器可以看作是…

    2022年4月5日
  • 一次简单的反射型XSS操作及思路

    一次简单的反射型XSS操作及思路xss是类似对html代码的注入,拼接恶意代码获取cookie等分为三种类型,分别是反射型、存储型和dom型反射型是不存入数据库,对自己有影响存储型是存入数据库,对来访者都有影响1.进入靶场看到输入框,进行插入js标签输入框里输入:<script>alert(1)</script>点击搜索语句没有执行,而是被当做文本搜索了,这显然不是我们想看到的,点…

    2022年6月10日
  • 浏览器下载文件名乱码_ie浏览器下载文件名字是乱码

    浏览器下载文件名乱码_ie浏览器下载文件名字是乱码FireFox下载时文件名乱码问题解决

    2022年4月20日
  • docker重新部署项目_docker一键部署

    docker重新部署项目_docker一键部署Docker为什么出现?阿里云镜像加速、HelloWorld流程底层原理、部署项目1、安装docker2、安装Docker-Compose3、编写相关配置文件Docker-Compose.yml编写Dockerfile编写Nginx的配置4、打包前端后端Docker简介Docker为什么出现?一款产品:开发–上线两套环境!应用环境,应用配置!开发—运维。问题:我在我的电脑上可以运行!版本更新,导致服务不可用

    2022年10月18日
  • QueueUserWorkItem_thread.join()

    QueueUserWorkItem_thread.join()代码:ThreadPool.SetMaxThreads(100,100);ThreadPool.QueueUserWorkItem((obj)=>{MessageBox.Show(“执行线程中的代码”);});Thread.Sleep(1000);intn=8;ThreadPool.QueueUserWorkItem((obj…

    2022年9月24日

发表回复

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

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