我听说有不同级别的Synchronization.are吗?(如果有的话,请你用代码片段解释一下吗?)谢谢。
答案 0 :(得分:3)
在Java 5之前,只有一个:synchronized
关键字。这等待并获得对参考对象的独占锁定。应用于函数时:
public synchronized void doStuff() { ... }
正在同步的对象是this
。
Java 5添加了许多并发工具,其中一个是Lock
对象。这有几个版本,包括ReadWriteLock
。这是我唯一可以想到的,你可能会指的是。
synchronized
的问题在于它相当粗糙。做得很糟,它可能导致死锁。 Java 5 utils允许非阻塞锁定获取,锁定获取超时和读/写锁定支持。
答案 1 :(得分:3)
您真的需要解释“同步级别”的含义。你在谈论之间的区别:
public synchronized void foo()
{
...
}
和
public void foo()
{
synchronized(lock)
{
...
}
}
?或者也许在上面和使用来自java.util.concurrent.locks的锁?
之间如果您能为您所听到的内容提供更多背景信息,我们可能会更好地为您提供帮助。更重要的是,您认为可能需要此信息的问题是什么?
答案 2 :(得分:0)
我假设OP指的是多线程中使用的对象的同步而不是Java中的关键字。
在阅读 Goetz 之后,我理解了Java中不同级别的同步。
让我们假设我们有一个对象,我们必须使用132个线程,这些对象连续使用 对象,纯粹随机,超过100年。
abstract Class ICount {
int i;
String iString;
public void add(int i);
public void sub(int i);
public void synchronized print(){
assert(i == Integer.valueOf(iString));
System.out.println("i"+String.valueof(i)+" == "+iString);
}
}
现在可能有不同的实现,无论是设计还是粗心,都是不同级别的线程安全。
如果这是一个真正的问题,大多数实际实现属于第四类“同步”,这有时是有效的,而且文档不足以在上述类别之一中进行分类,因此默认情况下属于第四类。