使用显式的Lock对象

作者: 桐桑入梦 | 来源:发表于2020-03-09 09:53 被阅读0次
package concurrency;

import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.ReentrantLock;

public class AttemptLocking {
    private ReentrantLock lock = new ReentrantLock();

    //尝试获取锁
    public void untimed(){
        boolean captured = lock.tryLock();
        try{
            System.out.println( "lock.tryLock() = " + captured );
        }finally {
            //如果获取了锁,那么需要释放锁
            if( captured )
                lock.unlock();
        }
    }

    //尝试获取锁一段时间,然后过了时间则放弃锁
    public void timed(){
        boolean captured = false;
        try{
            captured = lock.tryLock( 2, TimeUnit.SECONDS );
        }catch( InterruptedException e ){
            throw new RuntimeException( e );
        }

        try{
            System.out.println( "lock.tryLock( 2, TimeUnit.SECONDS ) = " + captured );
        }finally {
            if( captured )
                lock.unlock();
        }
    }

    public static void main(String[] args) {
        final AttemptLocking al = new AttemptLocking();
        al.untimed();
        al.timed();

        //创建一个匿名类
        new Thread(){
            { setDaemon( true );} //类似静态域,在创建对象的时候会执行
            @Override
            public void run(){
                al.lock.lock();
                System.out.println( "acquired");
            }
        }.start();
        Thread.yield(); //为了给run()方法顺利执行完一个机会


        //因为Thread.yield()效果不明显,故睡眠一会
        try {
            TimeUnit.SECONDS.sleep(2);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("main Thread after sleeping");
        al.untimed();
        al.timed();
    }
}

相关文章

  • 使用显式的Lock对象

  • Lock(锁)

    从JDK5.0开始,Java提供了更强大的线程同步机制——通过显式定义同步锁对象来实现同步。同步锁使用Lock对象...

  • 9-Lock显式锁

    Lock显式锁 在Java 5.0之前,在协调对共享对象的访问时可以使用的机制只有synchronized和vol...

  • Java多线程编程知识点系统梳理(3)

    一、锁的概述 (1)内部锁:synchronized关键字,通过指定对象作为监视对象(2)显式锁:Lock接口,R...

  • Lock锁 与 synchronized 比较

    Lock 定义:更强大的线程同步机制--显式定义同步锁对象来实现同步 特点: 在JUC(java.util.con...

  • 显式锁和AQS

    显式锁 Lock接口和核心方法 Lock接口和synchronized的比较 synchronized代码简洁,L...

  • Android面试知识点(三)*

    1、java里的锁总结(synchronized隐式锁、Lock显式锁、volatile、CAS)[https:/...

  • 7. 并发终结之Lock接口

    Lock是显式锁的接口,默认实现是ReentrantLock。 方法摘要 Lock.unlock方法要放在fina...

  • jsp内置(隐式)对象

    前言 JSP隐式对象是JSP容器为每个页面提供的Java对象,开发者可以直接使用它们而不用显式声明。JSP隐式对象...

  • 05 Java多线程之显式锁Lock

    1 什么是显式锁 java.util.concurrent.lock 中的 Lock 框架是锁定的一个抽象,它允许...

网友评论

    本文标题:使用显式的Lock对象

    本文链接:https://www.haomeiwen.com/subject/pzqudhtx.html