什么是程序的同步,怎样理解?

来源:百度知道 编辑:UC知道 时间:2024/06/22 22:11:28
看了 hashtable 和 hashmap的区别
其中有个 hashtable最好是程序同步时使用,反之就用hashmap
这里的同步我该怎么理解,我比较形象的例子或者代码接受更好

在很多实际的多线程应用中,通常会有两个或多个线程需要对相同的对象进行共享访问。如果两个线程访问的对象,而且每一个都调用了一个会改变对象状态的方法,那会发生什么呢?可以想像,线程会相互倾轧。根据各个纯种访问数据的不同顺序,可能会产生腐蚀的对对象。这种情况称为竞争条件(race condition)。
为了避免多个线程对共享数据的腐蚀,必须学会如何对存取进行同步。
我觉得举什么例子啊之类的,可能会误导你,还是看专业的话比较好。我上面的话是从《Java核心技术第2卷》里面抄下来的。
下面是我的理解:
hashtable是用Synchronize修饰的,也就是同步的。而HashMap不是。
这就要求你在用多个线程访问Hashtable时,不需要自己为它实现同步,而HashMap 就必须为之提供外同步。

线程同步时JAVA中的一个重要概念,举个典型的例子:一个生产工厂,有两个工作,一是销售它所生产的产品,一是生产产品。从销售方角度看,我们知道,这个工厂要销售产品,首先它必须要有产品,所以它得等到产品生产出来才能销售。
而从生产方角度看,他要等到销售方将库中所存的产品销售掉才能生产。
这就是同步。

同步:就相当于是每个人都要吃同一口锅里的饭,并且一个人吃的时候,其他人只能看着,
如果给每个人一口锅,那么就不存在同步问题了,

简单说,就是一个电脑,大家抢着玩,谁也不让谁