首页 > 其他分享 >ReentrantLock

ReentrantLock

时间:2024-08-15 10:08:04浏览次数:13  
标签:Thread currentThread getName ReentrantLock System 线程 out

可打断


import java.util.concurrent.locks.ReentrantLock;

/*
ReentrantLock可打断
 **/
public class T {

    private static ReentrantLock lock = new ReentrantLock();

    public static void main(String[] args) throws InterruptedException {

        Thread thread = new Thread(() -> {
            try {
                System.out.println(Thread.currentThread().getName() + " 尝试获得锁");
                lock.lockInterruptibly();
                System.out.println(Thread.currentThread().getName() + " 线程获得了锁");
            } catch (InterruptedException e) {
                e.printStackTrace();
                System.out.println(Thread.currentThread().getName() + " 线程没有获得锁,被打断...catch{return}");
            } finally {
                lock.unlock();
                System.out.println(Thread.currentThread().getName() + " 释放锁");
            }
        }, "线程1");

        System.out.println(Thread.currentThread().getName() + " 获得锁");
        //main线程加锁原因:为了使线程1一直处于运行状态(此处即一直在获取main持有的锁)。
        //假如main线程不加锁:线程1套层while(true)一直处于运行状态,再打断即可。
        lock.lock();
        thread.start();
        Thread.sleep(1000);
        System.out.println(Thread.currentThread().getName() + "...");
        //打断线程1
        thread.interrupt();
        System.out.println(Thread.currentThread().getName() + " 释放锁");
        lock.unlock();
    }

}

标签:Thread,currentThread,getName,ReentrantLock,System,线程,out
From: https://www.cnblogs.com/goodluckxiaotuanzi/p/18360313

相关文章

  • Java Reentrantlock可重入锁原理 | 源码探究
    一、基本概念ReentrantLock是Java中提供的一个可重入互斥锁,它是java.util.concurrent.locks包中的一个接口Lock的实现类。ReentrantLock提供了比使用synchronized关键字更强大的锁定机制,例如 公平锁 和 非公平锁 选择、尝试锁定、可中断锁定等。ReentrantLock......
  • ReentrantLock的阻塞性、可中断性
    结论:lock()如果没有获取到锁,会一直阻塞并尝试获取锁,直到获取到锁。lock()获取到锁之前,其他线程不可以中断该线程。因为线程Thread如线程t2的interrupt方法,想要中断线程,但不会真的中断,只会把t2的中断标志改变,所以线程t2还会继续运行。lockInterruptibly()获取到锁之前,其他线......
  • 可重入锁ReentrantLock
    ReentrantLock重入锁,是实现Lock接口的一个类,也是在实际编程中使用频率很高的一个锁,支持重入性,表示能够对共享资源重复加锁,即当前线程获取该锁后再次获取不会被阻塞。要想支持重入性,就要解决两个问题:在线程获取锁的时候,如果已经获取锁的线程是当前线程的话则直接再次获取成功......
  • Java中的ReentrantLock详解
    Java中的ReentrantLock详解大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在Java编程中,多线程同步是一个常见的需求。为了保证多个线程对共享资源的安全访问,Java提供了多种锁机制,其中ReentrantLock是一个重要的工具。本文将详细介绍ReentrantLock的使用,......
  • Java并发编程 - ReentrantLock
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录一、ReentrantLock是什么?二、基本使用2.1基本语法2.2经典案例-取款问题2.2.1不加锁情况2.2.2使用ReentrantLock三、特性3.1可重入3.2可打断3.2.1无竞争3.2.2有竞争-获取不到锁3.3.3......
  • ReentrantLock 简单使用
    摘自:《Java编程的逻辑》Java并发包中的提供了显式锁,它可以解决synchronized的一些限制。Java并发包中的显式锁接口和类位于包java.util.concurrent.locks下,主要接口和类有:❑锁接口Lock,主要实现类是ReentrantLock;❑读写锁接口ReadWriteLock,主要实现类是Reentran......
  • synchronized 和 ReentrantLock的区别
    synchronized和ReentrantLock的区别  在讨论synchronized和ReentrantLock的区别前,我们先了解一下什么是公平锁和非公平锁  一、公平锁和非公平锁  从公平的角度来说,Java中的锁总共可分为两类:公平锁和非公平锁。但公平锁和非公平锁有哪些区别?孰优孰劣呢?在Java......
  • synchronized 和 ReentrantLock (Lock)区别,优劣对比
    两种方法都是为了确保多线程环境中的线程安全,但它们使用了不同的同步机制:synchronized关键字和Lock接口。下面详细对比这两种方法的区别、优缺点以及适用场景。synchronized关键字publicsynchronizedvoidaddSession(HttpSessionsession){if(session!=null){......
  • ReentrantLock的非公平锁(NonfairSync)深度解析:源码之旅与实战策略
    1.引言在Java并发编程中,ReentrantLock作为一种可重入的互斥锁,提供了比synchronized更强大和灵活的功能。其中,NonfairSync作为ReentrantLock内部非公平锁的实现,其设计理念和源码实现都体现了对性能和公平性的权衡。2.NonfairSync概述非公平锁特性:新到达的线程在......
  • ReentrantLock类
    ReentrantLock与synchronized相比有以下特点可中断可以设置为公平锁支持多个条件变量与sychronized一样的支持可重入锁可打断锁(避免死锁):使用lockInterruptibly()方法publicclassTestReentrant{privatestaticReentrantLocklock=newReentrantLock();......