我一直在观看有关数据结构的许多视频,这些术语总是被提到:synchronized / not synchronized
和thread-safe / not thread-safe
。
有人能用简单的话解释一下Java中的synchronized
和thread-safe
是什么意思吗? sync
是什么,thread
是什么?
我一直在观看有关数据结构的许多视频,这些术语总是被提到:synchronized / not synchronized
和thread-safe / not thread-safe
。
有人能用简单的话解释一下Java中的synchronized
和thread-safe
是什么意思吗? sync
是什么,thread
是什么?
Thread
是程序的执行路径。单线程程序只有一个thread
,因此不会出现这个问题。几乎所有GUI程序都具有多个执行路径和线程,一个用于处理GUI的显示和用户输入,其他用于实际执行程序操作。这样可以使UI在程序工作时仍然保持响应。
简单地说,threadsafe
指的是可以安全从多个线程访问。当您在程序中使用多个线程,并且它们都试图访问公共数据结构或内存位置时,可能会发生一些问题。因此,您需要添加一些额外的代码来防止这些问题。例如,如果两个人同时编写同一份文档,则第二个人保存将覆盖第一个人的工作。为了使其线程安全,则必须强制让人1等待人2完成其任务,然后才允许人1编辑该文档。
Synchronized
表示在多线程环境中,Synchronized
对象不允许两个线程同时访问方法/代码块。这意味着一个线程不能读取而另一个更新它。第二个线程将等待第一个线程完成。速度会有所下降,但优点是数据的一致性得到了保证。
但如果您的应用程序是单线程的,则Synchronized
没有任何好处。
因此,在程序被多个线程访问时,线程安全是期望的行为。使用如果一个类在被多个线程访问时,无论运行环境如何调度或交错执行这些线程,并且在调用代码没有额外的同步或其他协调的情况下,都能正确地表现出来,则该类是线程安全的。
synchronized
块是实现该行为的一种方式。您还可以查看以下内容: