关于java中的线程同步问题
来源:互联网 发布:北京网络维护工资 编辑:程序博客网 时间:2024/05/03 22:22
关于java中的线程同步
在java中,每个对象只有一个相应的monitor,一个mutex,而每一个monitor都可以有多个“doors”可以进入,即,同一个monitor中被守护的代码可以在不同的地方,因为同一个对象可以出现在不同的代码段,只要mutex锁定的对象是同一个,每个入口都用Synchronized关键字表明,当一个线程通过了Synchronized关键字,它就所住了该monitor所有的doors。因此是mutex定义了monitor而不是代码。
为了方便理解monitor的概念举个例子:
飞机山只有一个洗手间,很多乘客都想进去,但一次只能进去一个人,其他人必须等待,此时有如下对应关系:
飞机:object
乘客:各个线程
洗手间:monitor
洗手间门上的锁:mutex
因为同步的花销很大,因此要尽量避免:
1,不需要同步原子操作:一个原子操作不会被另一个线程中断,所以原子操作不需要被同步;
2,避免同步,在语言上意味着“不变性”,一个具有不变性的对象的状态在其创建之后就不会改变,因此不变的对象不需要同步;通常频繁的访问一个对象,而不修改它,那么该对象就不需要同步,好的方法是使该对象为不可变的;
3,使用同步包装器,用装饰模式可以在同步与不同步之间选择。
另,java规范中并没有要求wait()方法要作为原子操作实现的,因此,判断是否wait()的条件用while比if要好,因为if虽然在某些java实现中起作用,但是其行为实际是不明确的,用while条件也称spin lock,用其代替if只是为了保险起见。(关于这一点while和if偶理解的不是太明白)
- 关于java中的线程同步问题
- 关于Java线程同步问题
- Java 关于线程同步的问题
- 关于Java中线程同步的问题
- 关于Java的线程同步问题
- 关于Java中线程同步问题
- java Android 中关于线程同步问题
- 关于线程同步问题
- 关于线程同步问题
- java 关于线程同步
- java线程系列---关于线程同步与互斥问题
- Java中的线程同步
- java中的线程同步
- Java中的线程同步
- Java线程中的同步
- Java中的线程同步
- java中的线程同步
- Java中的线程同步
- 华为开发人员与测试人员
- 2006/01/11 BLOG开通
- 如何快速实现HTML编辑器.NET组件 袁剑 (转贴)
- S-Records & Intel-HEX
- 多说两句。
- 关于java中的线程同步问题
- Joshua Bloch新作《Java解惑》即将上市——大家一起来做运动,Java思维体操!
- synchronized用法
- 领悟Web设计模式袁剑(转贴)
- Java基础知识——Java入门与加深
- 网页图片说明
- 博客,写什么
- 柏拉图对“爱”和“婚姻”的启示-
- PC CONTROL