
并发编程
文章平均质量分 57
one-fly
海阔凭鱼跃,天高任鸟飞
展开
-
Executor框架简介
Executor框架主要有3大部分组成1、任务:包括被执行任务需要实现的接口,Runnable接口或Callable接口2、任务的执行:包括任务执行机制的核心接口Executor,以及继承自Executor的ExecutorService接口。Executor框架有两个关键类实现了ExecutorSerivce接口(ThreadPoolExecutor和ScheduledThreadPoolExecutor)3、异步计算的结果:包括接口Future和实现Future接口的FutureTask类原创 2016-07-10 10:20:20 · 400 阅读 · 0 评论 -
多线程-join的应用
如果我们有多个子任务需要用多线程来处理,但是主线程又需要等待所有子线程执行完成后在返回,最简单的做法就是使用线程的join方法。原创 2016-07-04 21:32:47 · 415 阅读 · 0 评论 -
java原子操作类-原子数组类
java还提供了通过原子方式更新数组里的某个元素,Atomic包提供了以下4个类。AtomicIntegerArray:原子更新整型数组里的元素AtomicLongArray:原子更新长整型数组里的元素AtomicReferenceArray:原子更新引用类型数组里的元素原创 2016-07-04 20:58:39 · 953 阅读 · 0 评论 -
java原子操作类-基本类型类
当程序更新一个变量时,如果多线程同时更新这个变量,可能得到期望之外的值,比如变量i=1,A线程更新i+1,B线程也更新i+1,经过两个线程操作之后可能i不等于3,而是等于2。因为A和B线程在更新变量i之前拿到i的值都是1,这就是线程不安全的更新操作,通常我们可以采用synchronized来解决这个问题,但是效率比较低。原创 2016-07-03 22:39:47 · 2560 阅读 · 0 评论 -
volatile的应用
java编程语言允许线程访问共享变量,为了能够确保共享变量能被准确和一致的更新,线程应该确保通过排他锁单点获得这个变量。java语言提供了volatile关键字,在某些情况下比锁要更加方便。如果一个自动被声明为volatile,java线程内存模型确保所有线程看到这个变量的值是一致的。原创 2016-06-26 15:06:24 · 413 阅读 · 0 评论 -
java并发锁-Lock之队列同步器
Lock接口的实现基本上都是通过聚合了一个同步器的子类赖世雄线程的访问控制的。队列同步器AbstractQueuedSynchronizer是用来构建锁或者其他同步组件的基础框架,它内部使用了一个volatiole修饰的int类型的成员变量state来表示同步状态,通过内置的FIFO队列来完成资源获取线程的排队工作。原创 2016-07-03 18:20:18 · 1286 阅读 · 0 评论 -
等待超时模式在数据库连接池中的使用
在常用的数据库连接池中就应用了等待超时模式,在代码示例中模拟从连接池中获取连接,使用和释放连接的过程。而客户端获取连接的过程被设定为等待超时的模式,也就是在超时时间内如果无法获取到可用连接,将会返回一个null、设定令劫持的大小为10个,然后通过条件客户端的线程数来模拟无法获取连接的场景。原创 2016-06-29 22:11:56 · 1981 阅读 · 0 评论 -
java并发锁-Lock接口
并发锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程同时访问共享资源。在Lock接口出现之前,java主要依靠synchronized的关键字来实现多线程的同步功能。而从JDK1.5之后,并发包中新增了Lock接口来实现并发锁的功能,它提供了与synchronized关键字类似的同步功能,但是需要在使用时需要显示的获取锁和释放锁。与synchronized相比缺少了隐式的获取和释放锁的便捷性,但是却拥有了锁获取和释放的可操作性、可中断的获取锁以及超时获取锁等多种synchronize原创 2016-07-02 22:19:15 · 781 阅读 · 0 评论 -
ThreadPoolExecutor详解-FixedThreadPool
FixedThreadPool类型的线程池由Executors创建原创 2016-07-10 18:20:01 · 10964 阅读 · 0 评论 -
Executor框架-Executors
ThreadPoolExecutor是Executor框架的一个主要实现类,是执行具体任务的实现类。该实现类有Executor中的工厂类Executors提供的静态工厂方法负责创建。主要静态方法看原创 2016-07-10 17:40:04 · 1256 阅读 · 0 评论 -
多线程-管道输入/输出流
管道输入/输出流和普通的文件输入/输出流或者网络输入/输出流不同之处在于,它主要用于线程直接的数据传输,而传输的媒介为内存。管道输入/输出流主要包括了如下4钟具体实现:PipedOutputStream、PipedInputStream、PipedReader和PipedWriter,前两种面向字节,后两种面向字符。对于Piped类型的流,必须要先进行绑定,也就是调用connect方法,如果没有将输入/输出流进行绑定,对应流的访问会抛出异常。原创 2016-06-28 22:43:57 · 1348 阅读 · 0 评论 -
wait notify notifyAll
等待通知机制是指一个线程A调用了某个对象的wait的方法后进行等待状态,而另一个线程B调用了该对象的notify或者notifyAll方法,线程A收到通知后从对象的wait方法返回,进而执行后续操作,上述两个线程通过对象来完成交互,而对象上的wait和notify/notifyAll的关系就如同开关信号一样,用来完成等地方和通知方直接的交互工作。示例代码如下原创 2016-06-28 22:16:00 · 344 阅读 · 0 评论 -
多线程-CountDownLatch应用
CountDownLatch是jdk1.5版本之后的并发包中提供的可以实现join类似功能的实现类,比join的功能更多,使用更方便。CountDownLatch直接一个int类型的参数构成作为计算器,,然后我们通过CountDownLatch的引用调用countDown方法,计算器就会减1。而主线程则通过CountDownLatch提供的await方法进行阻塞,等待计数器减为0之后,则主线程停止阻塞,继续运行。当然如果主线程不想永远傻等下去,也可以传入超时时间和时间单位参数,等待超时时间结束后,主线程依原创 2016-07-04 21:50:14 · 624 阅读 · 0 评论