• Atmic和线程同步新机制


    ReentrantLock

    可重入锁ReentrantLock

    ReentrantLlock是可以替代synchronized的,原来写synchronized的地方换上lock.lock(),加完锁之后需要注意的是记得lock.unlock()手动解锁。

    lock.lock()写在try.....catch里面

    ReentranLock有一些功能还是要币synchronized强大的,强大的地方,你可以用tryLock进行尝试锁定,不管锁定与否,方法都将继续执行,synchronized如果搞不定的话它肯定阻塞了。

    ReentrantLock还可以指定为公平锁。(synchronized只有不公平锁)

    (公平的意思是:就像排队一样谁在前面谁先执行)

    ReentrantLock可以替代synchronized,它也可以重入,可以锁定,它的底层是cas。

    ReentrantLock:需要手动加锁,手动解锁、可以出现多个不同的等待队列、CLS的实现

    CountDownLatch

    CountDown(倒数)Latch(门栓)

    假如我new了100个线程,又来了100个数量的CountDownLatch,就是一个门栓,门栓上记了个数threads.length是100,每一个线程结束的时候我latch.countDown(),然后所有的线程start(),再latch.await(),最后结束。每个线程执行到latch.await()的时候这个门栓就在这里等着,并且记了个数100,每一个线程结束的时候都会往下CountDown,CountDown是在原来的基础上减1,一直到这个数字变成0的时候门栓就会被打开,它是用来等线程结束的。

    CyclicBarrier

    同步工具CyclicBarrier,意思是循环栅栏。比如这有一个栅栏,什么时候人满了就把栅栏推到,把人都放出去,出去之后又重新把栅栏扎起来,再来人,满了,推倒后继续。

    Phaser

    Phaser它更像结合了CountDownLatch和CyclicBarrier,叫阶段。

    Phaser是按照不同的阶段来对线程执行的,就是它本身是维护着一个阶段这样的一个成员变量,当前我是执行到那个阶段,是第0个,还是第一个等等,每个阶段不同的时候这个线程都可以往前走,有的线程走到某个阶段就停了,有的线程一直会走到结束。

    ReadWriteLock

    这个ReadWriteLock是读写锁。读写锁的概念就是共享锁(读锁)和排他锁(写锁)。

    当读线程上来的时候加一把锁是允许其它读线程可以读,写线程来了我不给它,你先别写,等我读完你再写。读线程进来的时候我们大家一块读,因为你不改原来的内容,写线程上来把整个线程全锁定,你先不要读,等我写完你再读。

    Semaphore

    Semaphore(信号灯),可以往里面传一个数,permits是允许的数量,你可以想着有几盏信号灯,一个灯里面闪着数字表示到底允许几个来参考我这个信号灯。

    s.acquire()这个方法叫做阻塞方法,阻塞方法就是说我大概acquire不到的话我就停在这里,acquire的意思就是得到。Semaphore的含义是限流。
    默认Semaphore是非公平的,new Semaphore(2.true)第二个值true才是设置公平。

    Exchanger

    Exchanger叫做交换器,就是线程之间交换数据用的。

    (

  • 相关阅读:
    重置主键自增
    tp5引入第三方类库
    判断浏览器是否是手机端
    网站二级域名的配置
    阿里云服务器php环境的搭建
    备忘录——二维码
    (3) 编写一个截取字符串的函数,输入一个字符串和字节数,输出按字节书截取的字符串,但是要保证汉字不能截半个
    (2) 假设字符串类似这样的aba和aab就相等,现在随便给你二组字符串,请编程比较他们看是否相等
    (1) 一个字符串,根据输入参数m,找出字符串的m个字符的所有字符串
    Windows下MySQL双向同步及环形同步的实现
  • 原文地址:https://www.cnblogs.com/striver20/p/13718720.html
Copyright © 2020-2023  润新知