关闭

并发注意事项(2)并发工具优先于wait和notify

标签: concurrentjavaCountDownLatch并发线程
949人阅读 评论(0) 收藏 举报
分类:

自jdk1.5以后java提供了更为高级的并发工具,他们可以完成wait和notify所能完成的工作。

在java.util.conturrent包中更高级的并发工具分成三类:Executor Framework,并发集合(Concurrent Collection)以及同步器(Synchronizer).

Executor Framework是线程池的调度,即调用线程池的静态方法:

ExecutorService executor = Executor.newSingleThreadExcecutor();

并发集合,既是在concurrent包中增加的一些并发的集合,例如:ConcurrentMap,其扩展了Map接口,并添加了一些方法。

ConcurrentMap除了提供了卓越的并发性外,速度也是非常快的,因此除非不得已,我们应当优先使用ConcurrentHashMap而不是Collections.synchronizedMap或者Hashtable.t

同步器是使一个线程能够等待另一个线程的对象我们经常用的同步器有CountDownLatch,它可下面是一个示例:

下面还有一个示例,是用CountDownLatch代替wait,notify的:

上面的方法中用了三个CountDownLatch的对象,进行交替唤醒,先用ready执行了 System.nanoTime(),再用start执行了action.run(),再用done执行了

System.nonaTime()-startNanos.

简而言之,我们应该,优先使用java.util.concurrent包中提供的更高级的语言来代替wait,notify.



0
0
查看评论

线程间协作的两种方式:wait、notify、notifyAll和Condition

Java并发编程:线程间协作的两种方式:wait、notify、notifyAll和Condition   在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作。比如说最经典的生产者-消费者模型:当队列满时,生产者需要等待队列有空间才能继续往里面放入商品,而在等待的期间内,生产者...
  • htofly
  • htofly
  • 2016-06-19 11:54
  • 1477

【总结】Effective java经验之谈,并发编程

内容包括,并发与并行,并发约束,并发下的集合类性能分析,并发相关包的概述,并发场景,并发总结集合包
  • superMarss
  • superMarss
  • 2015-04-22 17:49
  • 1953

MFC edit控件实现自动换行

必须设置Vertical Scrollbar = TRUE 必须设置MultiLine = TRUE 必须设置Horizontal Scrollbar = FALSE 必须设置Auto HScroll&#...
  • a200638012
  • a200638012
  • 2016-07-08 17:22
  • 4782

设置MFC Edit control可以换行显示

MFC Edit control可以换行显示 1.设置edit control 属性Multiline为true 2.写入数据时,想换行的时候写入"\r\n"即可,CString str.Replace("\n","\r\n"); ...
  • a780902723
  • a780902723
  • 2014-12-09 16:52
  • 2464

MFC中EDIT控件实现换行

一、通过回车换行: 这里要有两个设置 .将控件的属性设置为Mutilines->true; .将控件的另一个属性设置为Want return->true. 水平和垂直滚动条设置: 水平滚动条,控件属性设置为:Horizontal Scroll->TRUE ...
  • dearwind153
  • dearwind153
  • 2015-12-09 21:13
  • 3889

阻塞队列(CountDownLatch代替notify+wait解决wait释放锁,notify不释放锁问题)

import java.util.Date; import java.util.LinkedList; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; import java....
  • qq_18506947
  • qq_18506947
  • 2016-11-09 00:21
  • 664

JAVA线程间协作:wait.notify.notifyAll

JAVA的进程同步是通过synchronized()来实现的,需要说明的是,JAVA的synchronized()方法类似于操作系统概念中的互斥内存块,在JAVA中的Object类型中,都是带有一个内存锁的,在有线程获取该内存锁后,其它线程无法访问该内存,从而实现JAVA中简单的同步、互斥操作。明白...
  • u013256816
  • u013256816
  • 2015-12-31 10:39
  • 4764

Java并发编程(详解wait(), notify(),sleep())

上一篇博客,重点讲解了java中锁的机制,省的在多线程之间出现混乱的局面,其实主要能够理解钥匙即可。如果要保证方法之间能够独立完全的执行,因此就必须所有的方法都共用一把钥匙。然后小编最后也总结了一下,在此也再说一下。         1.调用同一个对象中非静态...
  • ZHOUCHAOQIANG
  • ZHOUCHAOQIANG
  • 2015-09-02 17:15
  • 2138

wait和notify的理解与使用

1.对于wait()和notify()的理解对于wait()和notify()的理解,还是要从jdk官方文档中开始,在Object类方法中有: void notify() Wakes up a single thread that is waiting on this object’...
  • jianiuqi
  • jianiuqi
  • 2016-12-03 23:09
  • 5817

线程间协作的两种方式:wait、notify、notifyAll和Condition

以下是本文目录大纲:   一.wait()、notify()和notifyAll()   二.Condition   三.生产者-消费者模型的实现   若有不正之处请多多谅解,并欢迎批评指正。   请尊重作者劳动成果,转载请标明原文链接:   http://www.cnblogs.com...
  • jeffleo
  • jeffleo
  • 2017-03-09 17:17
  • 278
    个人资料
    • 访问:176003次
    • 积分:2137
    • 等级:
    • 排名:千里之外
    • 原创:53篇
    • 转载:38篇
    • 译文:0篇
    • 评论:16条
    最新评论