2010-01-20 58 views

回答

3

在Java 5之前只有一个:​​关键字。这等待并获得了参考对象的排他锁。当应用于某个功能时:

public synchronized void doStuff() { ... } 

正在同步的对象是this

Java 5增加了很多并发实用程序,其中之一是Lock对象。这有几个版本,包括ReadWriteLock。这是我能想到的唯一可以指出的事情。

​​的问题在于它相当粗糙。做得很糟糕可能会导致死锁。 Java 5 utils允许非阻塞锁获取,锁获取超时和读/写锁支持。

3

你真的需要解释你的意思是“同步水平”。你谈论的区别:

public synchronized void foo() 
{ 
    ... 
} 

public void foo() 
{ 
    synchronized(lock) 
    { 
     ... 
    } 
} 

?或者也许在上面和使用java.util.concurrent.locks的锁?

如果您可以给您听到的更多背景,我们可能会更好地帮助您。更重要的是,你想解决什么问题,你认为可能需要这些信息?

+0

只是有些地方写有一些同步的水平,我不知道这是什么意思?而且我已经从我的老师那里听到了一些,他只是有一个点它,他说那些什么各级[:-(] – Johanna 2010-01-20 06:52:25

+1

@Johanna - ?在哪里“的地方”其实,我怀疑你是困惑和你的老师说的是完全不同的东西无论如何,你应该问的第一个人是你的老师?还是有人其他谁去讲座。 – 2010-01-20 07:08:23

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); 
    } 
} 

现在可能会有不同的实现,无论是设计还是粗心,在不同层次上都是线程安全的。

  1. 线程安全同步实现:保证任何java代码,不使用反射来使用这个实现来固定对象,永远不会触发断言。
  2. 并行同步实现:除了保证线程安全外,此实现的作者还尝试允许在可能的情况下同时执行,并且还避免了锁(争用)。
  3. 线程不安全的同步实现:开发人员至少知道他的类不是线程安全的,并且要求你不要使用这个实现,除非你只有一个线程。

如果这是一个真正的问题,大多数的实际实现落在第四类'同步',这有时是有效的,而不是足以在上述类别之一进行分类的文档,默认属于第四类。