同步和线程安全这两个术语是什么意思?

4

我一直在观看有关数据结构的许多视频,这些术语总是被提到:synchronized / not synchronizedthread-safe / not thread-safe

有人能用简单的话解释一下Java中的synchronizedthread-safe是什么意思吗? sync是什么,thread是什么?


3
可能是什么是'synchronized'的含义?的重复问题。 - Erki M.
什么是"ThreadSafe"? 请问有谁可以解释一下"ThreadSafe"的含义? - Erki M.
在Java教程中,解释了线程同步的概念。 - TNT
@ErkiM.,但是什么是“多线程环境”?实际上,在Java中,“线程”是什么意思? - Michael
@Michael http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html - Erki M.
1
这个问题对于SO的格式来说太过宽泛了。此外,有很多资源可以涵盖像这样的基本定义。你看过哪些资源?你读到的内容有什么不理解的地方吗?你必须更加具体,否则我们将不知道如何帮助你,除了重复已经存在并且容易找到的内容。 - yshavit
2个回答

4

Thread是程序的执行路径。单线程程序只有一个thread,因此不会出现这个问题。几乎所有GUI程序都具有多个执行路径和线程,一个用于处理GUI的显示和用户输入,其他用于实际执行程序操作。这样可以使UI在程序工作时仍然保持响应。

简单地说,threadsafe指的是可以安全从多个线程访问。当您在程序中使用多个线程,并且它们都试图访问公共数据结构或内存位置时,可能会发生一些问题。因此,您需要添加一些额外的代码来防止这些问题。例如,如果两个人同时编写同一份文档,则第二个人保存将覆盖第一个人的工作。为了使其线程安全,则必须强制让人1等待人2完成其任务,然后才允许人1编辑该文档。

Synchronized表示在多线程环境中,Synchronized对象不允许两个线程同时访问方法/代码块。这意味着一个线程不能读取而另一个更新它。第二个线程将等待第一个线程完成。速度会有所下降,但优点是数据的一致性得到了保证。

但如果您的应用程序是单线程的,则Synchronized没有任何好处。


0
根据CIP

如果一个类在被多个线程访问时,无论运行环境如何调度或交错执行这些线程,并且在调用代码没有额外的同步或其他协调的情况下,都能正确地表现出来,则该类是线程安全的。

因此,在程序被多个线程访问时,线程安全是期望的行为。使用synchronized块是实现该行为的一种方式。您还可以查看以下内容:

“synchronized”是什么意思?

“线程安全”是什么意思?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接