Java中的多例模式是一種創(chuàng)建有限數(shù)量實例的設(shè)計模式,它與單例模式相反。它可以用于多個線程同時訪問一個對象并且需要保持一致性的情況,否則可能會引起數(shù)據(jù)競爭問題。
public class MultiInstance { private static int instanceCount = 3; private static MultiInstance[] instances = new MultiInstance[instanceCount]; private static int currentInstance = 0; private MultiInstance() { // constructor is private to prevent instantiation outside of getInstance() } public synchronized static MultiInstance getInstance() { if (instances[currentInstance] == null) { instances[currentInstance] = new MultiInstance(); } MultiInstance instance = instances[currentInstance]; currentInstance = (currentInstance + 1) % instanceCount; // wrap around return instance; } public void doSomething() { // do something } }
多例模式使用一個靜態(tài)數(shù)組來存放所有實例的引用,通過一個計數(shù)器來決定下一個被使用的實例是哪一個。在getInstance()方法中,使用同步塊來保證線程安全,在創(chuàng)建實例之前首先判斷數(shù)組中是否有空槽,如果沒有,則返回數(shù)組中的第一個實例,并將計數(shù)器自加1,實現(xiàn)了輪詢地使用全部實例的功能。
在使用多例模式時,需要注意多線程之間對共享對象數(shù)據(jù)的并發(fā)訪問和數(shù)據(jù)更新,防止數(shù)據(jù)的不一致性。