工厂模式在Java多线程环境下的应用主要是为了确保对象的创建过程是线程安全的。在多线程环境中,如果不采取任何同步措施,多个线程可能会同时访问和修改共享资源,从而导致数据不一致或其他并发问题。工厂模式可以通过控制对象创建的方式来解决这些问题。
以下是一个简单的示例,展示了如何在Java多线程环境下使用工厂模式:
public interface Product {
void use();
}
public class ConcreteProduct implements Product {
@Override
public void use() {
System.out.println("使用具体产品");
}
}
public class ProductFactory {
private static volatile ProductFactory instance;
private Product product;
private ProductFactory() {
}
public static ProductFactory getInstance() {
if (instance == null) {
synchronized (ProductFactory.class) {
if (instance == null) {
instance = new ProductFactory();
}
}
}
return instance;
}
public Product createProduct() {
if (product == null) {
synchronized (this) {
if (product == null) {
product = new ConcreteProduct();
}
}
}
return product;
}
}
public class Main {
public static void main(String[] args) {
Thread thread1 = new Thread(() -> {
Product product = ProductFactory.getInstance().createProduct();
product.use();
});
Thread thread2 = new Thread(() -> {
Product product = ProductFactory.getInstance().createProduct();
product.use();
});
thread1.start();
thread2.start();
}
}
在这个示例中,我们使用双重检查锁定模式确保了工厂类的线程安全。当多个线程同时访问createProduct()
方法时,只有一个线程能够进入同步块,从而确保了对象创建过程的线程安全。