作者sshjj (我要钱$$)
站内java
标题[问题] synchronized的方法
时间Tue Feb 2 00:00:56 2010
请大家帮我看看我的观念对吗?
synchronized的用法可分为2类
第一类:
synchronized void method(){}
void method(){
synchronized(this)
}
以上这两个方法相同,就称第一类好了
第一类的方法,只能锁住相同类别,相同的instance
比如说有一个Student类别
Student sd1 = new Student();
Student sd2 = new Student();
new Thread(sd1).start();
new Thread(sd2).start();
sd1与sd2虽然同类别,但为不同的instance,
所以用第一类这种方法是不安全的
第二类:
static synchronized void method(){}
void method(){
synchronized(Student.class);
}
以上这两个方法相同,就称第二类好了
第二类的方法,可以锁住相同类别 且 相同或不同的instance
所以刚刚那个例子,用此方法的话就是安全的。
请问大家,我的观念对吗?
感觉第一类的方法似乎比较常看到,
但我拿来用时,就发生不安全的情形,
後来改成第二类的方法才解决。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.42.65.141
1F:→ jej:分类正确..但new出来instance是不同的..用第二个也锁不起来.. 02/02 00:09
3F:→ sbrhsieh:正确的观念是只有一种。也没有孰优孰劣 02/02 00:13
4F:→ sshjj:谢谢楼上,看来还需要再研究一下 02/02 00:13
5F:→ sshjj:那个连结我看过,但对於他的第四点一直没有很懂 02/02 00:15
6F:→ sbrhsieh:第四点不懂也可以说是四个都不懂 02/02 00:17
7F:→ sbrhsieh:一直提锁来锁去到底锁甚麽东西?锁了又有什麽作用? 02/02 00:33
※ 编辑: sshjj 来自: 114.42.65.141 (02/02 00:38)
8F:→ jej:就像连结说得..使用static someobj用singleton invoke.. 02/02 01:06
9F:→ jej:可以保证一个区块间只有一个thread..[这只是作法之一] 02/02 01:08