java - 多线程

标签 java multithreading synchronized

我对多线程有一个想法,但我从未实践过。因此,当我看到我的应用程序在工作时......我没有看到任何扩展 Thread 的类创建 Thread。因此,当两个对象尝试同时访问一个变量时,使用synchronized关键字。我们使用synchronized来避免冲突。

示例:

public class Test {

    private static int count = 0;

    public static synchronized void incrementCount() {
        count++;
    }
} 

如果测试类由对象使用,则将 synchronized 添加到 incrementcount() 是有意义的。但是,当您不扩展ThreadRunnable时,那么编写synchronized有什么用。

最佳答案

同步不适用于线程或可运行对象,它用于由多个线程访问的数据结构,以确保每个线程以不会损坏数据的方式访问它们。您自己的示例是这种情况的一种基本情况,其中 count 以一种非线程安全的方式递增( using ++, see this question ),因此需要锁定以确保一次只有一个线程可以递增它。

如果有其他代码访问 count,它也需要同步,以便 count 的更新对其可见。如果您所做的只是递增计数器,那么使用 java.util.concurrent.atomic.AtomicInteger 这样的类更有意义,并且您可以完全不使用同步关键字。

为了使同步有意义,它确实假设有多个线程。即使您自己的代码没有创建新线程,也可能存在多个线程调用您的代码的情况(例如在 servlet 容器中,容器管理线程池并向每个传入请求分配一个线程)。

关于java - 多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35809464/

相关文章:

java - 从自定义数据结构类返回流

java - 使用 NotesFactory 创建 session

java - 中断等待用户输入的线程

java - Android SDK SharedPreferences 的麻烦

java - 覆盖子类中的成员数据,在父类(super class)实现中使用?

java - 为什么并发修改共享对象的所有方法不需要同步修饰符?

Java:SingleThreadScheduledExecutor & java.util.concurrent.RejectedExecutionException

Java线程安全锁

java - 了解 Java 中的对象所有权

java - Java中的同步链表