什么是java中的线程同步?

问题描述:

什么是java中的线程同步? 详细给出了它的任何例子什么是java中的线程同步?

+1

在谷歌搜索,你会发现很多的很好的例子。 – 2010-09-21 20:44:17

+2

这看起来像作业。请自行找出基本知识,然后在此处询问一些更具体的问题。 – tangens 2010-09-21 20:45:45

+0

我通常不会详细回答作业问题。但从这里复制/粘贴的答案与从任何其他网站复制/粘贴的答案一样好。这不是好像在这里有一个编程问题。 – 2010-09-21 21:44:30

看看java tutorial关于同步。

+0

也请阅读Doug Lea在实践中的并发性。 – 2010-09-22 06:18:00

在多线程程序中,经常有部分程序需要以原子方式运行(就像它是单个操作一样)。这些通常被称为关键区域,并使用互斥(互斥)范例进行保护。 Java中的​​关键字就是提供互斥的一种方式。

考虑代码:

synchronized(lockObject) { 
    //critical code 
} 

在上面的代码中,只有一个线程可在一个时间进行,只要由变量lockObject对象引用从未改变输入同步块。这可以确保在同步块内执行的代码只能由单个线程执行。

需要锁定的常见示例是在迭代集合时。很少Java Collection实现提供线程安全迭代。创建线程安全迭代的基本方法是通过该集合上的同步块来保护对集合的每次访问。

例如:

synchronized(myCollection) { 
    myCollection.add(item); 
} 

synchronized(myCollection) { 
    myCollection.remove(item); 
} 

synchronized(myCollection) { 
    for(Object item:myCollection){ 
    System.out.println(item); 
    } 
}