gpt4 book ai didi

java - public synchronized void run() 是个坏主意吗?

转载 作者:行者123 更新时间:2023-11-30 09:18:04 24 4
gpt4 key购买 nike

我有一个扩展 Thread 的类,可以下载文件。我想确保一次只下载一次,因此我有一个对该类的静态引用,并在创建新引用之前检查它是否为 null。但是偶尔我会注意到创建了这个类的另一个实例,因此在不同的线程上下载。我试图找出可能导致这种情况的原因,但是,将线程的 run() 方法标记为同步(或调用 start() 的方法)通常不是一个好主意吗?有什么副作用需要注意吗?

最佳答案

您需要确保在 JVM 的生命周期中只创建上述对象的单个实例。为此,有一个非常著名的单例模式可以确保这一点。

将构造函数设为私有(private)。提供一个静态工厂方法来创建实例。

例子:

Downloader{

private static volatile Downloader iDownloader=null;
private Downloader(){
}

public static Downloader createDownloader(){
if(iDownloader==null){
synchronized(Downloader.class){
if(iDownloader==null)
iDownloader=new Downloader();
}
}
return iDownloader;
}

关于java - public synchronized void run() 是个坏主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18688889/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com