JAVA的同步机制——线程同步辅助类
这一小节主要介绍JAVA中有哪些同步机制,下面几个小节会分别介绍这些同步机制的用途,希望可以让大家对JAVA的同步机制有一定了解。好了,我们开始吧!
(1)synchronized关键字,这个相信大家很了解,最好能理解其中的原理,这里不多少,以后会专门分享一篇关于synchronized关键字的文章;
(2)Lock接口及其实现类,如ReentrantLock.ReadLock和ReentrantReadWriteLock.WriteLock。
以上两种都是最基本的,也是大家在实际项目中最常用的,一般用lock的比较多,能提高效率,典型的对比如Hashtable和CurrentHashMap的性能对比;
那还有那些更高级的同步机制:
(3)信号量(Semaphore):是一种计数器,用来保护一个或者多个共享资源的访问,它是并发编程的一种基础工具,大多数编程语言都提供这个机制,这也是操作系统中经常提到的。
(4)CountDownLatch:是Java语言提供的同步辅助类,在完成一组正在其他线程中执行的操作之前,他允许线程一直等待,这个类的使用已经在我的博客中了,大家可以去看看,自己去体验一下,平时编程不常用,但是实际中可能很有用,还是要多了解一下的;
(5)CyclicBarrier:也是java语言提供的同步辅助类,他允许多个线程在某一个集合点处进行相互等待;这个感觉慢有意思的,我的博客中已经有了,大家可以去看看
(6)Phaser:也是java语言提供的同步辅助类,他把并发任务分成多个阶段运行,在开始下一阶段之前,当前阶段中所有的线程都必须执行完成,JAVA7才有的特性。
(7)Exchanger:他提供了两个线程之间的数据交换点。
总结一下吧,这些同步机制很多,但是所有的同步机制都是基于信号量Semaphore来实现的。在应用程序中,任何时候都可以使用信号量来保护临界区,这是一个很基础的同步机制。