首页 > 其他分享 >ReentrantLock测试

ReentrantLock测试

时间:2022-11-21 12:02:53浏览次数:66  
标签:runnable Thread lock ReentrantLock start 测试 new

 

博客:https://www.jianshu.com/p/7058c21e615e

    public static void main(String[] args) {
       test3();
    }


    public static void test1() {
        Runnable runnable = () -> {
            for (int i = 0; i < 3; i++) {
                System.out.println(Thread.currentThread().getName() + "输出了 " );
            }
        };
        new Thread(runnable, "a").start();
        new Thread(runnable, "b").start();
    }

    public static void test2() {
        ReentrantLock lock = new ReentrantLock();

        Runnable runnable = () -> {
            try {
                lock.lock();
                for (int i = 0; i < 3; i++) {
                    System.out.println(Thread.currentThread().getName() + "输出了:  " + i);
                }
            } catch (Exception e) {
                throw new RuntimeException(e);
            } finally {
                lock.unlock();
            }
        };
        new Thread(runnable, "a").start();
        new Thread(runnable, "b").start();
    }

    public static void test3() {
        AtomicInteger nextThread = new AtomicInteger(1);

        ReentrantLock lock = new ReentrantLock();
        Condition conditionA = lock.newCondition();
        Condition conditionB = lock.newCondition();

        Runnable runnableA = () -> {
            for(; ; ) {
                try {
                    lock.lock();
                    while (nextThread.get() != 1) {
                        conditionA.await();
                    }
                    System.out.println(Thread.currentThread().getName() + " 输出了A  ");
                    nextThread.set(2);
                    conditionB.signalAll();
                } catch (Exception e) {
                    throw new RuntimeException(e);
                } finally {
                    lock.unlock();
                }
            }
        };

        Runnable runnableB = () -> {
            for(; ; ){
                try {
                    lock.lock();
                    while (nextThread.get() != 2) {
                        conditionB.await();
                    }
                    System.out.println(Thread.currentThread().getName() + " 输出了B  ");
                    nextThread.set(1);
                    conditionA.signalAll();
                } catch (Exception e) {
                    throw new RuntimeException(e);
                } finally {
                    lock.unlock();
                }
            }
        };

        new Thread(runnableA, "a").start();
        new Thread(runnableB, "b").start();
    }

 

 

标签:runnable,Thread,lock,ReentrantLock,start,测试,new
From: https://www.cnblogs.com/smileblogs/p/16910973.html

相关文章

  • 软件测试PIE模型
    bug分为fault:静态存在的问题(程序中存在的error:程序中存在问题但是没有触发出来(测试结果有误但是机缘巧合跟实际结果一样)failure:程序中存在问题并且触发......
  • Java 同步锁ReentrantLock与抽象同步队列AQS
    AbstractQueuedSynchronizer抽象同步队列,它是个模板类提供了许多以锁相关的操作,常说的AQS指的就是它。AQS继承了​​AbstractOwnableSynchronizer​​类,AOS用于保存线程对......
  • Java 同步锁ReentrantLock与抽象同步队列AQS
    AbstractQueuedSynchronizer抽象同步队列,它是个模板类提供了许多以锁相关的操作,常说的AQS指的就是它。AQS继承了​​AbstractOwnableSynchronizer​​类,AOS用于保存线程对......
  • 47、OAK测试FeatureTracker节点和ImageManip节点
    基本思想:继续学习oak的例子和硬件模块cmakelists.txtcmake_minimum_required(VERSION3.16)project(depthai)set(CMAKE_CXX_STANDARD11)find_package(OpenCVREQUIRED)#mes......
  • 单元测试:会变化的定义
    有一种东西,如果它太小,需要付出的努力就太大;如果它太大,就很难测试。没错!它是单元。但是什么才是一个好的单元定义呢?为什么它如此重要? 单元的定义对测试过程有很大的......
  • postman接口测试工具汉化教程
    1.汉化包地址 https://github.com/hlmd/Postman-cn/releases?page=1下载对应版本下的app.zip解压后放到postman安装路径下的版本号目录下的resources文件夹中  2.......
  • 作为一名测试工程师,我为什么要写博客?
    第一篇文章,讲讲自己为什么要写博客点点点手工测试的逆袭一般和开发一样分两步:让自己变得牛逼,让别人知道你牛逼.首先作为一名测试工程师,我的工作就是跟进版本,编写测试......
  • 2013-11-11 Oracle 课堂测试 练习题 例:BULK COLLECT及return table
    --1)查询“计算机”专业学生在“2007-12-15”至“2008-1-8”时间段内借书的--学生编号、学生名称、图书编号、图书名称、借出日期;selects.stuid,s.stuname,b.bid,b.ti......
  • 操作系统 测试题
    一、单选1、下面哪项不是常用调度算法A、FCFS B、SJF C、HRN D、ABC2、响应比的计算方法是A、(作业等待时间+作业执行时间)/作业执行时间B、(作业等待时间+作业执行时间)/......
  • C# WPF 测试直接绑定依赖属性双向传递是没有问题的
    续这篇测试:https://www.cnblogs.com/huvjie/p/16909290.html测试页面:<Windowx:Class="MyWPFSimple3.MainWindow"xmlns="http://schemas.microsoft.com/winfx/......