java学习之多线程的同步实现方式

最近一直在学习多线程方面的知识,感觉多线程真是太深奥了,自己越看越觉得这方面的知识真是太牛逼了,自己也是摸着石头过河,同时也在借鉴网络上各位大神的分享,在不断丰富自己对多线程方面的理解.下面也是自己学习的一些总结点,如有不足还望指教.

多线程的优势就是能够提高服务的效率,处理高并发的问题非常合适.提高了我们代码的性能.但同时由于Java虚拟机的实现限制,导致我们在实现多线程提高性能的时候,需要考虑的数据的安全性,唯一性,可见性.使得各个线程的想要得到的结果是他们想要的.线程直接互相不干扰.这里就是我们一直在讨论的线程同步的问题.线程在某个共享的部分实现了同步,就不会造成干扰的可能性了.

如何实现同步:Java只要提供了synchronized和Lock两种方式

一,synchronized关键字和Lock的实现原理

1,synchronized的实现原理:主要是通过jvm虚拟机赋予对象或类的monitor来实现同步的.线程通过获取到放弃monitor的两个状态来控制与其他线程的竞争关系.
2,Lock的实现原理:主要是通过代码功能来实现的,通过state状态字段来实现线程同步.当state为0时,则获取到锁,state设为1,运行代码代码块,其他线程进来时,全部放入线程队列中,进行等待,进入阻塞状态,通过无线for循环实现的自旋锁.tryacquire()方法是校验是否lock被占用,没有的话则把该线程放入exclusiveOwnerThread变量,如果有的话就执行acquireQueued()方法,将该线程放入等待队列中.该方法详细内容后面文章会补充说明.


二synchronize和Lock特点:

由于原理不同,两种方式实现同步的方法也不同.所以特点也不同.

1,synchronize可以修饰代码块,修饰方法.而lock主要用在代码块里

2,由于lock是代码实现的同步,而且具体实现的功能扩展类比较多,功能也相对更加方便,一些复杂的同步功能实现都是通过Lock来实现的.

3,性能方面,具体不清楚,看别人分享的说synchronize的锁实现同步在jdk5之前比较慢,后面的版本进行优化,性能有所提升,和Lock

实现方式差不多.

4使用中,简单的同步通过synchronize来实现就可以了,复杂的同步功能可以通过Lock来实现.

扫描二维码关注公众号,回复: 49788 查看本文章

水平有限,个人理解为主,还望大神多指教.两者的具体使用方式后面博客详细分享.


猜你喜欢

转载自blog.csdn.net/zxf_0601/article/details/79971358