Java线程同步机制
什么线程同步?
Java有哪些线程同步机制?
回答:
我的理解是:线程同步是指并发执行的多个线程,通过某种方式让它们串行执行,即线程同步。
首先我们先来探讨两个问题:
一、 为什么需要线程串行?
并发的线程在对共享资源进行操作时往往会带来不是期望中的结果,可以参考秒杀中的超卖场景。
线程安不安全也就是建立在多个并发的线程如何对共享资源进行操作上的,如果多个线程都没有共享资源,那么线程之间都没有关系,自然不需要做任何处理。
所以当多个线程真的同时对某个资源进行操作时(比如网上的多个用户同时发起了购票操作)就必须按某种顺序去依次执行线程,这就相当于用户在线下排队依次购票了。
二、 串行执行不就丧失多线程的并发特性了么?
确实是会损失一定的并发性能,但这里的串行并不是单纯说一个线程执行完,另一个线程再执行。
比如两个线程都是执行下面的流程:
- 执行任务一
- 执行任务二
- 执行任务三
其中只有任务二涉及到共享资源,那么我们就应该让执行任务二来顺序执行就可以了,这就涉及到同步应该尽量将粒度降低从而提高并发性能,又因为往往同步机制在Java中由锁来实现,所以问题就引申为了常见的“如何降低锁的粒度”问题。
明白了上述问题后,基本上就搞清了线程同步的问题,后面的就比较简单的,说他简单并不是说实现简单,而是Java提供了成熟的线程同步的方案,只要多练习就能学会。无非以下几种
- synchronize系列关键字
- ReentrantLock等锁
实际上就是根据锁来实现,线程只有获得一把资源锁才能对资源进行操作,操作完了就释放这把锁,别的线程就能继续获得锁并对资源操作了,这就做到了同步,也可以叫做是对共享资源的串行操作。
至于锁的实现或说原理,都是基于CAS,这个CAS不光是锁的实现,等你慢慢学习线程并发时,会发现这个CAS理论是所有解决方案或技术的基础。 所以尽量提前学会这个。
等着慢慢学习过程,分布式锁也会慢慢学到,长路漫漫,同学继续加油!
以上是 Java线程同步机制 的全部内容, 来源链接: utcz.com/p/944486.html