工廠模式在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()
方法時,只有一個線程能夠進入同步塊,從而確保了對象創建過程的線程安全。