多线程编程有优势也有风险
优势:提高系统的吞吐量、提高响应速度、可以充分利用多核、最小化对系统资源的使。
缺点:最主要的线程安全问题、抢锁、上下文的切换导致资源的浪费、可靠性。
对于这个可以通过synchronized和lock解决,也可以通过volatile解决,原子性的操作是很重要的。有一点synchronized和volatile还是有点区别的,有人把volatile和synchronized关键字所代表的内部锁作比较,称之为轻量级的锁。但是synchronized可以保证操作对象的原子性,它又能保证内存的可见性。volatile是不能想synchronized关键字所代表的内部锁那样保证操作的原子性,它只能保证内存的可见性。
设计模式
我们也可以通过设计模式达到**线程安全**。比如Inmmutable Object(不可变对象),Thread Specific Storage(线程特有的存储),Serial Thread Confinement(串行线程封闭)。
1、Inmmutable Object 是通过将对象的状态设置成为不可变的对象,当要修改对象的状态,新创建一个对象来进行变更,不改变对象自身的状态。
2、Thread Specific Storage 是通过将并发任务通过队列进行串行化,在创建一个唯一的线程队列对队列的任务进行执行。
3、Serial Thread Confinement 是通过在服务的客户端代码和子任务的处理之间引入一个协调者,把有关分而治之的细节都封装在这个协调者里面。然后由各个子任务由专门的工作者线程进行负责处理。
以上都是可以**不用锁**可以达到线程安全。
不对的地方请指出,谢谢!!!