zoukankan      html  css  js  c++  java
  • 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叫做交换器,就是线程之间交换数据用的。

    (

  • 相关阅读:
    蒟蒻の搜索学习总结
    蒟蒻の红黑树总结
    数据结构与算法
    linux常用命令
    Linux防火墙Firewall和Iptables的使用
    Spring Boot 自定义Intercepter
    Spring Boot 自定义Filter
    SpringBoot 全局异常配置
    SpringBoot设置支持跨域请求
    springboot整合shiro安全框架
  • 原文地址:https://www.cnblogs.com/striver20/p/13718720.html
Copyright © 2011-2022 走看看