
JAVA并发
iteye_4653
这个作者很懒,什么都没留下…
展开
-
JAVA并发-并发编程概述
不知道各位童鞋是否干过在程序主进程中嵌入IO操作这样“任性”的事情,笔者曾经干过,而且那时候还觉得自己很棒。没办法,那时候还年轻啊。后来随着学习的深入,知道了有nio这种神一样的东西。但如果有其他方案,至少笔者是不会使用nio这个类的。毕竟程序的易读性还是很重要滴。多数时候,我们完全可以使用多线程和IO阻塞来代替非阻塞IO。最近读了下经典《Java并发编程实践》,大师的书的确很棒,好了不说废话...2016-03-27 19:25:26 · 99 阅读 · 0 评论 -
JAVA并发-为现有的线程安全类添加原子方法
JAVA中有许多线程安全的基础模块类,一般情况下,这些基础模块类能满足我们需要的所有操作,但更多时候,他们并不能满足我们所有的需要。此时,我们需要想办法在不破坏已有的线程安全类的基础上添加一个新的原子操作。有如下4中方案:1 修改类的源码,以添加新的原子操作2 继承该线程安全类,并添加原子操作3 使用客户端加锁方式4 使用组合方式[b](推荐)[/b]一般来讲,修改源码的方式不...2016-03-30 20:46:09 · 110 阅读 · 0 评论 -
JAVA并发- 典型连接池的实现
[code="java"]package com.xyz.connpool;public interface IConnection { /** * 关闭当前连接 */ public void close(); /** * 销毁当前连接 */ public void destroy(); //应该具备的其他方法}[/code][c...2016-04-22 10:44:35 · 153 阅读 · 0 评论 -
JAVA并发-DCL与JMM
首先必须声明,[color=red]在volatile出现之前,错误的DCL代码如下。在volatile出现之后,正确的DCL代码如下[/color]。代码如下:[code="java"]//错误的代码public class Singleton { private static Singleton instance=null; private Singleton(){} pu...2016-04-26 19:21:28 · 126 阅读 · 0 评论 -
JAVA并发-减少锁的竞争
降低锁的竞争可以提高并发程序的性能和可伸缩性,有3种方式可以降低锁的竞争:[color=red]1. 减少锁的持有时间(缩小锁的范围)2. 降低锁的请求频率(降低锁的粒度)3. 放弃使用独占锁,使用并发容器,原子变量,读写锁等等来代替它。[/color][color=blue]减少锁的持有时间(减小锁的范围):[/color]减少锁的持有时间实际上就是减小锁的控制范围,...2016-06-04 16:01:35 · 128 阅读 · 0 评论 -
JAVA并发-中断处理和任务取消
[color=red]中断处理[/color]在java程序中,当使用Thread.sleep()或者BlockingQueue.take()等阻塞方法时,需要处理InterruptedException。对于这种异常,通常有2种方案进行处理。1. 传递异常:将异常传递给方法的调用者。示例如下:[code="java"]BlockingQueue queue;public Stri...2016-06-27 22:42:34 · 257 阅读 · 0 评论 -
JAVA并发-线程状态和线程组
[color=red]在Java中,线程有6种基本状态[/color],理解这6种基本状态之间的关系可以让我们对多线程有更好的理解.如下图所示:[img]http://dl2.iteye.com/upload/attachment/0118/7655/fe777fae-e76f-3618-8993-1ee02ea29927.jpg[/img][color=red]在Java中,所有的线...2016-07-18 14:14:38 · 142 阅读 · 0 评论 -
JUC之CAS
JUC是java.util.concurrent包的简称,该包提供了并发编程的解决方案(当然,JAVA并发编程的解决方案还有synchronized)。从概括的层面来说,JUC包有两大核心:CAS和AQS。其中CAS是java.util.concurrent.atomic包的基础,AQS是java.util.concurrent.locks包以及一些常用类比如Semophore等类的基础。我们先来...2016-07-27 10:56:00 · 1458 阅读 · 0 评论 -
JUC之AQS
[color=red]AQS是同步框架,它进行两个方面的工作:资源的管理和资源申请者的管理。[/color]对应由两部分组成:一个volatile int state(代表共享资源)和一个FIFO线程等待队列(多线程争用资源被阻塞时会进入此队列)。state的访问方式有三种:[code="java"] getState() setState() compareAndSetState...2016-07-27 15:49:23 · 368 阅读 · 0 评论