五丶多线程之JUC(Lock)

一丶JUC是什么

java.util.concurrent是我们java中常用的并发包,简称juc。

二丶LOCK接口

1.和synchronized对比:

之前使用的锁都是synchronized关键字锁,来进行,但是这样锁不够灵活,而且不能自己控制,但是如使用lock锁,我们就可以进行自己来控制何时使用何时取消。

2.关于lock锁的具体实现:

1. ReentrantLock :重入锁

表示已获取锁的线程重新进入的时候不会阻塞,但是会增加一次锁的次数。

2. ReentrantReadWriteLock:读写重入锁

规定了多个排斥:读读不互斥,读写互斥,写写互斥。

3.Lock锁的使用:

   static Integer num = 0;
    public static void main(String[] args) {

        ReentrantLock reentrantLock = new ReentrantLock();

        for (int i = 0; i < 1000; i++) {
            new Thread(()->{
                reentrantLock.lock();
                num++;
                reentrantLock.unlock();
            }).start();
        }

        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("-------"+num);
    }

1.lock.lock()其实是对线程竞争
2.lock.unlock()其实是对线程的重新竞争,和释放。

4.关于lock的原理的探索

线程的安全必要几个因素:

1.线程必须抢占共享资源,该资源必须标识是否被抢占
2.如果资源被抢占,要把阻塞的线程放到一个队列中并阻塞
3.关于重入:资源中要标识当前被那个线程占有锁
4.线程的释放,和重新竞争

源码解读:

在这里插入图片描述

5.公平锁和非公平锁

公平锁就是遵循先等待的先执行,后等待的后执行,非公平就是一起抢占。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值