快速业务通道

Java线程:线程的同步 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
获得一个锁,就没有任何 其他线程可以进入(该对象的)类中的任何一个同步方法。

5)、如果线程拥有同步和非同步方法,则非同步方法可以被多个线程自由访 问而不受锁的限制。

6)、线程睡眠时,它所持的任何锁都不会释放。

7)、线程可以获得多个锁。比如,在一个对象的同步方法里面调用另外一个 对象的同步方法,则获取了两个对象的同步锁。

8)、同步损害并发性,应该尽可能缩小同步范围。同步不但可以同步整个方 法,还可以同步方法中一部分代码块。

9)、在使用同步代码块时候,应该指定在哪个对象上同步,也就是说要获取 哪个对象的锁。例如:

public int fix(int y) {         synchronized (this) {             x = x - y;         }         return x;     }

当然,同步方法也可以改写为非同步方法,但功能完全一样的,例如:

public synchronized int getX() {         return x++;     }

public int getX() {         synchronized (this) {             return x;         }     }

效果是完全一样的。

Java线程:线程的同步(3)

时间:2010-12-08 BlogJava Werther

三、静态方法同步

要同步静态方法,需要一个用于整个类对象的锁,这个对象是就是这个类 (XXX.class)。

例如:

public static synchronized int setName(String name){       Xxx.name = name; }

等价于

public static int setName(String name){       synchronized(Xxx.class){             Xxx.name = name;       } }

四、如果线程不能不能获得锁会怎么样

如果线程试图进入同步方法,而其锁已经被占用,则线程在该对象上被阻塞 。实质上,线程进入该对象的的一种池中,必须在哪里等待,直到其锁被释放, 该线程再次变为可运行或运行为止。

当考虑阻塞时,一定要注意哪个对象正被用于锁定:

1、调用同一个对象中非静态同步方法的线程将彼此阻塞。如果是不同对象, 则每个线程有自己的对象的锁,线程间彼此互不干预。

2、调用同一个类中的静态同步方法的线程将彼此阻塞,它们都是锁定在相同 的Class对象上。

3、静态同步方法和非静态同步方法将永远不会彼此阻塞,因为静态方法锁定 在Class对象上,非静态方法锁定在该类的对象上。

4、对于同步代码块,要看清楚什么对象已经用于锁定(synchronized后面括 号的内容)。在同一个对象上进行同步的线程将彼此阻塞,在不同对象上锁定的 线程将永远不会彼此阻塞。

五、何时需要同步

在多个线程同时访问互斥(可交换)数据时,应该同步以保护数据,确保两 个线程不会同时修改更改它。

对于非静态字段中可更改的数据,通常使用非静态方法访问。

对于静态字段中可更改的数据,通常使用静态方法访问。

如果需要在非静态方法中使用静态字段,或者在静态字段中调用非静态方法 ,问题将变得非常复杂。已经超出SJCP考试范围了。

Java线程:线程的同步(4)

时间:2010-12-08 BlogJava Werther

六、线程安全类

当一个类已经很好的同步以保护它的数据时,这个类就称为“线程安全的” 。

即使是线程安全类,也应该特别小心,因为操作的线程是间仍然不一定安全 。

举个形象的例子,比如一个集合是线程安全的,有两个线程在操作同一个集 合对象,当第一个线程查询集合非空后,删除集合中所有元素的时候。第二个线 程也来执行与第一个线程相同的操作,也许在第一个线程查询后,第二个线程也 查询出集合非空,但是当第一个执行清除后,第二个再执行删除显然是不对的, 因为此时集合已经为空了。

看个代码:

public class NameList {     private List nameList = Collecti

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号