锁
-
锁的本质是占有,锁的目的是同步。
-
乐观锁CAS,不是锁,是无锁结构。
-
分布式锁,没有什么特殊的,只是能跨进程执行同步而已。只要是锁放在独立进程外,那么它就有作为分布式锁的可能,比如redis的 setNx,比如数据库的写锁,都可以作为分布式锁。用独立的一个java的锁通过RPC协议保留获取锁和释放锁的接口,那么它也可以可以成为分布式锁。
-
互斥锁,读写锁
-
互斥锁是最简单的锁,也是最常见的锁,它的用处是保证任务的串行。避免并发操作带来的问题
-
读写锁,写锁就是互斥锁,锁是共享锁。读写写互斥,所以读写和写写一样是串行的。只有读读可以并行,不受到限制。
-
-
CountDownLatch和 CyclicBarrier描述两个任务之间的顺序关系。
-
CountDownLatch,描述的是一个任务阻塞,直到N个条件满足,这个任务才能继续执行。
-
CyclicBarrier,描述的多任务执行到只能执行到指定位置,除非大家都到了指定位置
-
Semaphore,这是一个令牌桶,限制单位之间通过的任务数量
-
-
假设我们有3 个任务,如果需要他们按照顺序执行怎么办?
如果他们执行开始就需要前置条件,那么他们用三个线程执行是没有意义的,我们使用队列让他们依次执行。
-
如果我们有3个任务,他们全面一部分消耗资源不较多,但是没有依赖关系,后班部分有依赖,必须顺序执行,怎么办?
我们把A,B,C 三个任务拆分成成 A1,B1,C1 和 A2,B2,C2。
A2,B2,C2 用一个线程执行,并且使用CountDownLatch阻塞,A1,B1,C1使用三个线程分别异步执行,执行玩任意一个都调用CountDownLatch.countDown()方法,减少数量,三个都执行完成以后A2,B2,C2的线程执行。 -
如果
posted on 2023-01-30 23:10 zhangyukun 阅读(56) 评论(0) 编辑 收藏 举报