我对多线程有一个想法,但我从未实践过。因此,当我看到我的应用程序在工作时......我没有看到任何扩展 Thread 的类创建 Thread
。因此,当两个对象尝试同时访问一个变量时,使用synchronized
关键字。我们使用synchronized来避免冲突。
示例:
public class Test {
private static int count = 0;
public static synchronized void incrementCount() {
count++;
}
}
如果测试类由对象使用,则将 synchronized
添加到 incrementcount()
是有意义的。但是,当您不扩展Thread
或Runnable
时,那么编写synchronized
有什么用。
最佳答案
同步不适用于线程或可运行对象,它用于由多个线程访问的数据结构,以确保每个线程以不会损坏数据的方式访问它们。您自己的示例是这种情况的一种基本情况,其中 count 以一种非线程安全的方式递增( using ++, see this question ),因此需要锁定以确保一次只有一个线程可以递增它。
如果有其他代码访问 count,它也需要同步,以便 count 的更新对其可见。如果您所做的只是递增计数器,那么使用 java.util.concurrent.atomic.AtomicInteger 这样的类更有意义,并且您可以完全不使用同步关键字。
为了使同步有意义,它确实假设有多个线程。即使您自己的代码没有创建新线程,也可能存在多个线程调用您的代码的情况(例如在 servlet 容器中,容器管理线程池并向每个传入请求分配一个线程)。
关于java - 多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35809464/