请问各位大虾,synchronized (this)两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行。那么synchronized ("A"),synchronized ("dhdhfh")表示什么意思呢?参数一个字符串
解决方案 »
- 如何处理这样List
- SWING界面问题:BalloonTip包的BalloonBorder代码在哪里下?
- ORACLE查询中遇到的一个问题
- 低级错误..在线急等
- 求:Java API文档中文版CHM
- 用JAVA读C的数据,只能按字节来读,如果数据中有超过127的值,超出了JAVA中Byte的最大值了,怎么处理?
- 求助java关于日历的代码
- 在html中 <input type="text" name="create_user" maxlength="12" size="12"> 不能限制中文字符个数???
- 我靠!搞一天啦!在我机器上就是不行!jdk1.2,jdk1.3都试了!
- 怎么回事,我的javac????
- UTF-8 转 ANSI
- java 类中直接写方法
在java中,每个对象都持有一把对象锁,这是在java语言层实现的机制(有别于JAVA 5 中的lock),因此不需要显式释放锁。synchronized 是线程级的,并不是方法级的,因此如果两个方法都对同一个对象加了synchronized方法,并且在一个方法A中调用了另外一个方法B,如果线程调用方法A,也不会在A调用B时需要等待锁释放,因为此时线程已经获得锁了。回到你的问题,synchronized(this), 表示线程锁加在被调用对象本身上,因此,同一时刻,该对象只能有一个synchronized方法会被一个线程调用,其它线程调用的synchronized方法都会阻塞以等待锁的释放synchronized(this) 适用于方法彼此间都会修改对象的某个状态,如果在某个对象的两个synchronized彼此不会共享任何资源,比如A中修改资源r1,B中修改资源r2,则在A和B中同时加上synchronized(this)会引起不必要的性能开销,因为调用A和B的线程不必要同步,此时简单的办法就是通过为A和B加不同的锁:
Object lock1 = new Object();
Object lock2 = new Object();
public void A(){
synchronized(lock1){
}
}
public void B(){
synchronized(lock2){
}
}
这样,调用A和B的线程之间不会同步,只有都调用A或者都调用B的线程间需要同步。希望对你有帮助
其实没啥意思