addXXXListener中的synchronized

原创 2004年07月30日 14:29:00
原来用JBuilder的时候有辅助添加事件的功能,但加上的addXXXListener,removeXXXListener,fireXXXEvent的方法签名中老有一个synchronized关键字,不太理解,直到最近自己做的一个事件里涉及到多线程时出错才发现有用,但JBuilder中生成的事件处理方法还稍有不妥,即如果在Listener(事件监听者)中有addXXXListener或removeXXXListener时,会出ConcuurentModificationException,另外由于synchronized的范围比较大,如果事件监听程序运行时间比较长也会有影响,因此做了一个public Collection synchronized getXXXListeners() { return new ArrayList(xxxListeners); }再把fireXXX方法签名中的synchronized去掉,再把其中的xxxListener改用getXXXListeners(),甚至可以把通知每个监听者做成线程(看是否有同步异步的影响而定)。这样的事件处理在我看来应该算是比较能够接受又没有上面的Bug了。还有一个方案,就是把xxxListeners改成用Vector,这样add,remove,get都可以把synchronized去掉,因为Vector本身是一个synchronized版本的Collection。

多线程之synchronized关键字详解

synchronized关键字用于多线程访问程序中的共享资源时实现顺序同步访问资源。可以修饰方法或者代码块。而且关键字synchronized取得的锁都是对象锁,什么叫对象锁呢,就是一个对象产生一把锁...
  • Trigl
  • Trigl
  • 2016年04月15日 20:23
  • 2052

多线程并发 synchronized对象锁的控制与优化

本文针对用户取款多线程并发情境,进行相关多线程控制与优化的描述.
  • sharpyuce
  • sharpyuce
  • 2013年08月26日 12:32
  • 6165

Java多线程之生产者消费者问题<一>:使用synchronized 关键字解决生产者消费者问题

今天看了一片博文,讲Java多线程之线程的协作,其中作者用程序实例说明了生产者和消费者问题,但我及其他读者发现程序多跑几次还是会出现死锁,百度搜了下大都数的例子也都存在bug,经过仔细研究发现其中的问...
  • feichenwangyalin
  • feichenwangyalin
  • 2014年10月16日 22:22
  • 1886

JAVA线程安全之synchronized关键字的正确用法

JAVA线程安全关于synchronized关键字的用法,今天才知道原来我一直错了。以为用了synchronized关键字包住了代码就可以线程同步安全了。 测试了下。发现是完全的错了。syn...
  • WALLEZhe
  • WALLEZhe
  • 2016年08月23日 13:48
  • 756

Java多线程内存可见性实现 synchronized (java 学习笔记)

Java多线程内存可见性实现 synchronized &volatile(java 学习笔记) 这只是一个师范学院的计算机非师范大一生自学JAVA的小小笔记。学习于网上资源(百度,csdn,慕课网...
  • lymmm2
  • lymmm2
  • 2015年06月24日 21:15
  • 361

Java练级打怪路--synchronized对比cas

原创 沙茶敏碎碎念 2016-11-27 21:56 前言 这篇文章的营养非常有限,只是一个夜黑风高的晚上,突发奇想,如果我要统计一个网站的PV,程序应该怎么写呢? 一种挫逼的写法 ...
  • u011277123
  • u011277123
  • 2016年11月30日 09:28
  • 834

java 5多线程乐观锁CAS之于悲观锁synchronized

在Java并发包中有这样一个包,java.util.concurrent.atomic,该包是对Java部分数据类型的原子封装,在原有数据类型的基础上,提供了原子性的操作方法,保证了线程安全。下面以A...
  • shangruo
  • shangruo
  • 2016年10月10日 14:37
  • 1112

多线程读书笔记二(java内存模型、volatile变量、内存模型与synchronized、CAS)

java内存模型 java中,线程之间的通信是通过共享内存的方式,存储在堆中的实例域,静态域以及数组元素都可以在线程间通信。java内存模型控制一个线程对共享变量的改变何时对另一个线程可见。 线程间的...
  • jinyongqing
  • jinyongqing
  • 2014年03月16日 22:52
  • 2862

Java多线程中 synchronized和Lock的区别

在上一节中, 我们已经了解了Java多线程编程中常用的关键字synchronized,以及与之相关的对象锁机制。这一节中,让我们一起来认识JDK 5中新引入的并发框架中的锁机制。 我想很多购买...
  • lingzhm
  • lingzhm
  • 2015年04月08日 21:28
  • 10850

同步——synchronized机制、Lock和Conditon机制和关于线程中断

Java在java SE 5.0引入了不同与synchronized的另一种加锁方式,java.util.concurrent.Locks包中的两个锁类:ReetrantLock类,为可重入锁。 还有...
  • jingsuwen1
  • jingsuwen1
  • 2016年07月06日 15:45
  • 3344
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:addXXXListener中的synchronized
举报原因:
原因补充:

(最多只允许输入30个字)