最新文章列表

java的concurrent用法详解

我们都知道,在JDK1.5之前,Java中要进行业务并发时,通常需要有程序员独立完成代码实现,当然也有一些开源的框架提供了这些功能,但是这些依然 没有JDK自带的功能使用起来方便。而当针对高质量Java多线程并发程序设计时,为防止死蹦等现象的出现,比如使用java之前的wait()、 notify()和synchronized等,每每需要考虑性能、死锁、公平性、资源管理以及如何避免线程安全性 ...
snoopy7713 评论(0) 有1020人浏览 2012-08-03 11:28

并发笔记-----------使用显示的Lock对象

java机制中除了用synchronized关键字来做同步一外。 还可以用java.util.concurrent.lock包中的类 Lock lock=new ReentrantLock()来代替synchronized同步锁 区别是:    使用synchronized 失败会抛出异常。    而使用Lock后可以finally{}讲系统维护在正确的状态 Lock对象必须被显示的创建,锁定和释放 ...
ren2881971 评论(0) 有987人浏览 2012-08-01 17:18

尽量把CyclicBarrier和CountDownLatch的区别说通俗点

先说两点都知道的: 1.CountDownLatch减计数,CyclicBarrier加计数。 2.CountDownLatch是一次性的,CyclicBarrier可以重用。 然后我们用被大家说烂了的跑步的例子继续说事儿: 1. 有五个人,一个裁判。这五个人同时跑,裁判开始计时,五个人都到终点了,裁判喊停,然后统计这五个人从开始跑到最后一个撞线用了多长时间。 import java.ut ...
aaron-han 评论(0) 有9510人浏览 2012-07-13 15:55

DCL,volatile,Final

Double check lock模式的典型代码:     public class Singleton { private static Singleton instance = null; private Singleton() { } public static Singleton getInstance() { if ...
asticx 评论(0) 有962人浏览 2012-07-10 00:23

线程池简单实现

其实线程池的实现就是生产者消费者问题 的实现,理解了生产者消费者问题 就不会对线程池的实现感到神秘了,线程池在很多地方会用到,比如 tomcat 等各种中间容器的实现, Spring 对线程池的支持等,当然 mina 中也使用到了线程池的概念。 看下简单对线程池的实现代码,主要包括三个类,一个是线程池,一个是工作任务,一个是客户端进行任务添加。 任务类,比较简单,实现 ...
weistar 评论(0) 有1097人浏览 2012-06-25 11:42

同步器--Exchanger

用于实现两个线程间的数据交换,每个线程在完成一定的任务后想与对方交换数据,第一个先拿出数据的线程将一直等待第二个线程拿着数据到来时,才能彼些交换数据. public class ExchangerTest { public static void main(String[] args) { final Exchanger<String> exchanger = new Exc ...
weistar 评论(0) 有947人浏览 2012-06-25 08:11

同步器--CountDownLatch

CountDownLatch像倒计时计数器,调用它的countDown()方法就将计数器减1,当达到0时,所有等待者开始执行, 可以实现一个人通知多人,如裁判,也可以实现一个计划要多个领导签字后才能继续向下实施的情况. public class CountdownLatchTest { public static void main(String[] args) { ExecutorS ...
weistar 评论(0) 有877人浏览 2012-06-24 21:55

同步器--CyclicBarrier

/** * 淘宝面试题:如何充分利用多核CPU,计算很大的List中所有整数的和 * @author weistar * */ public class CountListIntegerSum { private long sum;// 存放整数的和 private CyclicBarrier barrier;// 障栅集合点(同步器) private List< ...
weistar 评论(0) 有975人浏览 2012-06-24 21:55

同步器--Semaphore

它可以维护当前访问自身的线程个数,并提供了同步机制,使用它可以控制同时访问资源的线程个数,如实现一个文件允许的并发访问数. 单个信号灯对象可以实现互斥锁的功能,并且可以是由一个线程获得了"锁",再由另一个线程释放"锁",可应用于死锁恢复的场合. 注:还有另一个构造器Semaphore(int permits, boolean fair),其中fair为tr ...
weistar 评论(0) 有989人浏览 2012-06-24 21:55

使用Condition实现多路等待通知

一个锁内部可以有多个Condition,即有多路等待和通知,可参考JDK1.5的Lock和Condition实现的可阻塞队列的应用案例,在传统的线程机制中一个监视器对象上只能有一路等待和通知,要想实现多路等待和通知,必须嵌套使用多个同步监视器对象. 使用Condition可简单实现多路等待通知 public class TwoConditionCommunication { publi ...
weistar 评论(0) 有997人浏览 2012-06-24 21:54

使用readLock与writeLock实现缓存

锁妙用: 读写锁:分为读锁和写锁,多个读锁不能互斥,读锁与写锁互斥,写锁与写锁互斥,这是由JVM自己控制的,只要上好相应的锁即可,如果你的代码只读数据,可以多人同时读,但不能同时写,那就上读锁;如果要修改数据,只能有一个人在写,且不能同时读取,那就上写锁,总之,读的时候上读锁,写的时候上写锁. 如使用readLock与writeLock实现缓存 public class CacheDemo { ...
weistar 评论(0) 有1144人浏览 2012-06-24 21:54

Callable与Future应用

应用于异步的任务执行,类似JS的回调方法. Future取得的结果类型与Callable返回的结果类型必须一致. 如异步执行方式: public class FutureTaskDemo { public static void main(String[] args) { // 初始化一个Callable对象和FutureTask对象 Callable<Object& ...
weistar 评论(0) 有971人浏览 2012-06-23 17:14

线程间通信

传统线程间通信 // 传统的线程通信 public class TraditionalThreadCommunication { public static void main(String[] args) { final Business business = new Business(); new Thread(new Runnable() { @Override ...
weistar 评论(0) 有959人浏览 2012-06-23 17:06

多线程访问共享数据

多线程访问共享数据方式总结:   1.若每个线程执行的代码相同,可以使用同一个Runnable对象,这个Runnable对象中有那个共享数据,如卖票系统. 2.若每个线程执行的代码不同,这时需要用不同的Runnable对象,有以下几种方式来实现这些Runnable对象之间的数据共享: 2.1将共享数据封装在另外一个对象中,然后将这个对象逐一传递给各个Runnable对象,每个线程 ...
weistar 评论(0) 有1253人浏览 2012-06-23 15:38

ThreadLocal数据共享与优雅设计

ThreadLocal用于实现线程内的数据共享,即对于相同的代码,多个模块在同一线程中运行时要共享一份数据,而在另外的线程中运行时又共享另外一份数据. 实现对ThreadLocal变量的封装,让外界不直接操作ThreadLocal变量,一是对基本类型的数据封装,这种应用相对少见,二是对对象类型的数据封装,较常见,即让某个类针对不同线程分别创建一个独立的实例对象. 以下是ThreadLocal常用 ...
weistar 评论(0) 有1041人浏览 2012-06-23 15:18

Java 理论与实践: 非阻塞算法简介

简介:  Java™ 5.0 第一次让使用 Java 语言开发非阻塞算法成为可能,java.util.concurrent 包充分地利用了这个功能。非阻塞算法属于并发算法,它们可以安 ...
weistar 评论(0) 有998人浏览 2012-06-21 10:49

AbstractQueuedSynchronizer(4)

Condition是一个条件功能的class,必须放在Lock代码块内,如同wait,notify方法放在synchronized块一样。 Condition的(await,signal)与object的(wait,notify)相比,提供了更为通用和灵活的解决方案,可以让多种条件的线程之间相互通信。 Condition的定义: public interface Condition{ ...
czj4451 评论(0) 有2483人浏览 2012-04-13 12:58

最近博客热门TAG

Java(141747) C(73651) C++(68608) SQL(64571) C#(59609) XML(59133) HTML(59043) JavaScript(54918) .net(54785) Web(54513) 工作(54116) Linux(50906) Oracle(49876) 应用服务器(43288) Spring(40812) 编程(39454) Windows(39381) JSP(37542) MySQL(37268) 数据结构(36423)

博客人气排行榜

    博客电子书下载排行

      >>浏览更多下载

      相关资讯

      相关讨论

      Global site tag (gtag.js) - Google Analytics