工廠模式在Java多線程環(huán)境下的應(yīng)用主要是為了確保對象的創(chuàng)建過程是線程安全的。在多線程環(huán)境中,如果不采取任何同步措施,多個線程可能會同時(shí)訪問和修改共享資源,從而導(dǎo)致數(shù)據(jù)不一致或其他并發(fā)問題。工廠模式可以通過控制對象創(chuàng)建的方式來解決這些問題。
以下是一個簡單的示例,展示了如何在Java多線程環(huán)境下使用工廠模式:
public interface Product {
void use();
}
public class ConcreteProduct implements Product {
@Override
public void use() {
System.out.println("使用具體產(chǎn)品");
}
}
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();
}
}
在這個示例中,我們使用雙重檢查鎖定模式確保了工廠類的線程安全。當(dāng)多個線程同時(shí)訪問createProduct()
方法時(shí),只有一個線程能夠進(jìn)入同步塊,從而確保了對象創(chuàng)建過程的線程安全。