• Lock锁


    一:Lock锁的含义

    ●Lock也是Java中锁的一大家族。同synchronized一样,保证操作的原子性。
    ●Lock是一个接口,两个直接实现类:ReentrantLock(重入锁),ReentrantReadWriteLock(读写锁)。

    ●Lock锁,使用时手动获取锁和释放锁,比synchronized更加灵活;可中断的获取锁;超时获取锁。
    ●ReentrantLock的底层是AQS队列[Abstract Queued Synchronizer队列同步器],AQS队列的底层是一种先入先出队列。具有可冲入,
        公平/非公平锁的特点,其底层具有一种工作窃取算法用来提高工作效率。 

    非公平锁会抢占锁资源,执行效率会更高。

    工作窃取:当一个线程是空闲时,它会监听哪一个线程是繁忙的,主动去帮助繁忙的线程。

       
    ●可重入:属于锁的一种特性。线程在完成任务后,会判断是否能够拿到下一次使用资源的机会。如果可以,就继续占用锁(锁的变量自增),不放弃对当前锁的占用。当锁的变量为0时,B和C就可以使用锁了。
    ●公平/非公平锁:核心的区别就是抢占。

    ReentrantLock和Synchronized的区别:可以实例化对象;含有更多丰富的方法;

    二:Lock锁案例

    1. package com.zc;
    2. import java.util.concurrent.locks.Lock;
    3. import java.util.concurrent.locks.ReentrantLock;
    4. import com.sun.org.apache.bcel.internal.generic.NEW;
    5. public class Test09 implements Runnable{
    6. Lock lock1=new ReentrantLock();
    7. private int ticketNum=100;
    8. @Override
    9. public void run(){
    10. lock1.lock();
    11. long l1=System.currentTimeMillis();
    12. for(int i = 0; i < 20; i++) {
    13. System.out.println(Thread.currentThread().getName()+" : "+i);
    14. try {
    15. Thread.sleep(100);
    16. } catch (InterruptedException e) {
    17. // TODO: handle exception
    18. e.printStackTrace();
    19. }
    20. }
    21. lock1.unlock();
    22. }
    23. public static void main(String[] args) {
    24. Test09 t1=new Test09();
    25. new Thread(t1,"张丹").start();
    26. new Thread(t1,"李思").start();
    27. new Thread(t1,"王吴").start();
    28. }
    29. }

    lock():获得锁

    trylock():只有在调用时它不被另一个线程占用才能获取锁。

    unlock():线程无响应时,尝试释放此锁。

    三:某个Java技术实现线程安全的原理是什么?

    》悲观锁ReentrantLock和Synchronized.才能保证原子性操作,创建互斥区。

    》还有一些可以向线程安全方向优化的技术。比方说,乐观锁的思想,CAS理论,volatile.

  • 相关阅读:
    [附源码]java毕业设计静谧空间自习室预订系统
    k8s yaml文件编写技巧
    定制开发一款家政小程序,应知应会
    Redis三种模式——主从复制,哨兵模式,集群
    2.6 Windows驱动开发:使用IO与DPC定时器
    php中判断指定字符串是否包含指定字符的封装函数
    0.0和0.00竟然不相等!!!BigDecimal别用错了比较方式
    C# 虚方法
    请问这个for loop的running time是多少?
    Parseval’s Theorem & Parseval’s Identity of Fourier Transform
  • 原文地址:https://blog.csdn.net/weixin_52014130/article/details/127089573