java 线程并发
文章平均质量分 56
木木不
每天敲一行代码,一年也有360行代码了~
展开
-
ThreadLocal实现线程范围的共享变量
这里先说下ThreadLocal不是一个线程的本地实现版本,不是一个Thread,它是thread local variable(线程局部变量);用于实现线程内的数据共享,即对于相同的程序代码,多个模块在同一个线程中运行时要共享一份数据,而在另外线程中运行时又共享另外一份数据。换一句话说就是为每一个使用该变量的线程都提供一个变量值的副本,是每一个线程都可以独立地改变自己的副本,而不会和其它线程的副原创 2012-04-20 16:17:00 · 2538 阅读 · 0 评论 -
可阻塞的队列——ArrayBlockingQueue
阻塞队列与Semaphore有些相似,但也不同,阻塞队列是一方存放数据,另一方释放数据,Semaphore通常则是由同一方设置和释放信号量。ArrayBlockingQueue只有put方法和take方法才具有阻塞功能api说明:public class ArrayBlockingQueueextends AbstractQueueimplements BlockingQueu原创 2012-05-08 15:17:34 · 1011 阅读 · 0 评论 -
线程同步工具类——CountDownLatch
CountDownLatch犹如倒计时计数器,调用CountDownLatch对象的countDown方法就将计数器减1,当计数到达0时,则所有等待者或单个等待者开始执行。可以实现一个人(也可以是多个人)等待其他所有人都来通知他,这犹如一个计划需要多个领导都签字后才能继续向下实施。还可以实现一个人通知多个人的效果,类似裁判一声口令,运动员同时开始奔跑等例子。下面来具体看下api的说明原创 2012-05-08 15:04:38 · 736 阅读 · 0 评论 -
线程同步工具——Exchanger
Exchanger用于实现两个人之间的数据交换,每个人在完成一定的事务后想与对方交换数据,第一个先拿出数据的人将一直等待第二个人拿着数据到来时,才能彼此交换数据。 对于Exchanger的用法比较简单,api中也只有两个方法exchange(V x) 等待另一个线程到达此交换点(除非当前线程被中断),然后将给定的对象传送给该线程,并接收该线程的对象。原创 2012-05-08 15:11:23 · 729 阅读 · 0 评论 -
Semaphore实现信号灯
Semaphore一个计数信号量。从概念上讲,信号量维护了一个许可集。如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可。每个release() 添加一个许可,从而可能释放一个正在阻塞的获取者。但是,不使用实际的许可对象,Semaphore 只对可用许可的号码进行计数,并采取相应的行动。 Semaphore可以维护当前访问自身的线程个数,并提供了同步机制。使用原创 2012-05-08 14:44:48 · 690 阅读 · 0 评论 -
Lock&Condition实现线程同步通信
先看jdk文档的说明: public interface ConditionCondition 将 Object 监视器方法(wait、notify 和notifyAll)分解成截然不同的对象,以便通过将这些对象与任意Lock 实现组合使用,为每个对象提供多个等待 set(wait-set)。其中,Lock 替代了synchronized 方法和语句的使用,Co原创 2012-05-08 14:21:41 · 822 阅读 · 0 评论 -
线程同步工具类——CyclicBarrier
CyclicBarrier一个同步辅助类。 它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用。因为该 barrier 在释放等待线程后可以重用,所以称它为循环 的 barrier。CyclicBarrier 支持一个可选的 Runnable 命原创 2012-05-08 14:58:22 · 865 阅读 · 0 评论 -
解决ArrayList线程不安全
前些天做项目时,程序出现意外的问题,经后来分析是使用ArrayList这个线程不安全的方法导致解决这个问题通常有两种方法(个人认为)一:使用synchronized关键字,这个大家应该都很熟悉了,不解释了;二:使用Collections.synchronizedList();使用方法如下: 假如你创建的代码如下:List> data=new ArrayList>();原创 2012-03-01 19:29:35 · 37189 阅读 · 3 评论 -
java创建线程的两种传统方式
1)继承Thread,重写其的run方法2)实现Runnable接口代码如下: package com.study;/** * * @ClassName: ThreadTest * @Description: 创建线程的两种方式 * @author 我夕 */public class ThreadTest { public static vo原创 2012-04-19 13:22:49 · 1372 阅读 · 0 评论 -
线程池中Executors应用(一)
Executors是JDK1.5中线程并发库的类(api参考java.util.concurrent),该类提供了很多用于创建线程池的方法,返回的线程池都实现了ExecutorService接口,这些线程池通常可提高程序性能。 本章用到的方法: 1.创建指定线程大小 public static ExecutorService newFixedThreadPool(int nTh原创 2012-04-26 22:58:29 · 1251 阅读 · 0 评论 -
线程池中ScheduledExecutorService定时器功能(二)
java中的定时器功能 在jdk1.5之前,大家都用传统的定时器Timer来实现该功能如,我们需要定制一个特殊方法,在程序首次载入时就执行,以后每隔一定的时间去执行那个方法传统的做法如下; /** * 定时器的测试(传统方式) */ public static void testTimer(){ Timer timer = new Timer原创 2012-05-08 13:50:10 · 9501 阅读 · 0 评论