Java并发编程(十七)常见的设计模式
单例模式单例模式,也就是所谓的工厂模式,单例模式是在设计模式中非常常见的模式,也是应用最为普遍的模式之一。它的特点是:确保系统中的类只产生一个实例。运用这种模式带来的最直观的好处是,减小开销,提高效率。这种模式省略了大量的new操作,对于要大量的使用某些重量级对象的程序而言,有着极大的优化。 123 ...
阅读更多
Java并发编程(十六)死锁状态
死锁在实际应用上,使用锁的环境远远要多于使用无锁。但是经常使用锁,一般都会面对一个问题,那就是死锁,现在用一个例子,简单的阐述死锁。 哲学家的餐桌哲学家就餐问题就是一个常见的死锁问题。有四个哲学家坐在一个正方形的桌子上面,每个桌角都放置有一个叉子,而哲学家必须使用两个叉子才能正常进餐,但是哲学家们并 ...
阅读更多
Java并发编程(十五)线程互助的SynchronousQueue
让线程之间互相帮助:SynchronousQueue在线程池的介绍当中,提到一个非常特殊的队列,叫做SynchronousQueue。它的容量为0,对任何一个写操作,都要等待一个读操作,可以把SynchronousQueue看做为一个数据的交换通道。讲到这样一个需要等待操作的方法,不得不提到之前的L ...
阅读更多
Java并发编程(十四)无锁状态
无锁加锁是保证线程安全的常用手法,但是被加锁之后,往往会产生一些效率的问题,那不使用锁,也能保证线程安全吗?当然可以,并且,使用无锁的方法去实现的线程安全,不仅仅在效率上占优,而且,还不会产生死锁的问题哦。 无锁的策略:CAS(Compare And Swap)经常被使用的无锁方法,叫做CAS,就是 ...
阅读更多
Java并发编程(十三)ThreadLocal
ThreadLocal锁可以保证一个变量被使用的时候,可以将其锁住,不让其他线程修改,那么引申到一个问题,可不可给每个线程都设置一个变量,让他们各自为营,以空间去换取时间呢?当然可以,于是乎就有了ThreadLocal这个新的方法,举例: 123456789101112131415161718192 ...
阅读更多
Java并发编程(十二)如何提高锁的性能
几种提高锁性能的方法减小锁持有的时间synchronized虽然可以保持原子性,但是大量的使用synchronized会使系统的整体性能下降,于是,我们可以只在需要上锁的时候上锁,对某些不改变系统数据的方法不上锁 1234567891011121314151617181920212223242526 ...
阅读更多
Java并发编程(十一)并发容器
并发容器一些常用的工具 ConcurrentHashMap:线程安全的hashmap。 CopyOnWriteArrayList:线程安全的ArrayList,比较适合读多写少的场合,完胜vector。 ConcurrentLinkedQueue:线程安全的队列,它们两之间的差别在于数据结构不一样, ...
阅读更多
Java并发编程(十)线程池
线程池线程池的基本使用创建一个线程池线程的每一次创建,最后的结果免不了都是销毁,那么在大型的系统的,就有着不断地创建和销毁,线程的创建和销毁开销是很大的,甚至在一些小的任务当中,创建和销毁的开销甚至超过了任务本身,那么,有方法可以去减少这种开销吗?设计者当然也想到了,于是乎有了线程池这个事物,使用线 ...
阅读更多
Java并发编程(九)同步控制
多线程的团队协作重入锁(ReentrantLock)什么是重入锁重入锁和synchronized非常的相似,我们知道synchronized的锁区域是用大括号所包围起来的,而ReentrantLock则是可以自己决定加锁的位置和解锁的位置的 12L.lock();L.unloock(); 1234 ...
阅读更多
Java并发编程(八)synchronized原理
synchronized原理synchronized的概念synchronized的简介synchronized是一个在Java中比较常见的锁。可以选择在代码中加入synchronized代码块,也可以在方法头加入synchronized的声明。 12345678910public class Sy ...
阅读更多