Technology sharing

Singleton consilio exemplaris

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Exemplar singleton efficit ut genus unum tantum habeat instantia, ipsum instantiat et hoc instantia totius systematis praebet
Praecipuum munus in singleton exemplar est ut unum tantum instantia generis existat

argumenta adhibenda;
Vide numerum ut generantis
● Pagina interretiali calculis, ne technologiam datorum omni tempore reficiatur, primum cache
Obiecta crea quae nimis multas facultates consumunt, ut I/O et nexus datorum, etc.

Sunt 7 modi exsequendi singleton exemplaris
Maxime dividitur in stilum esurientem et piger stilum
Esurientem Chinese style: Class loading faciet unum instantia objectum creari
Stylus piger: Classis loading obiecti unicum instantiam non creari facit, sed quando primum obiectum creatur.

Hic optimus modus est demonstratio ad exemplum singletonum efficiendum: exemplar singleton efficiendum in forma enumerationis utendum (exsequendo numerum serialem generantis)

public enum SequenceGenerator {
    INSTANCE;

    private int sequenceNumber;

    // 构造函数,初始化序列号为0
    private SequenceGenerator() {
        this.sequenceNumber = 0;
    }

    /**
     * 获取下一个序列号。
     * @return 下一个序列号
     */
    public synchronized int getNextSequenceNumber() {
        return sequenceNumber++;
    }
}

// 测试类
public class SequenceGeneratorTest {
    public static void main(String[] args) {
        // 创建一个线程安全的列表来存储生成的序列号
        List<Integer> sequenceNumbers = new CopyOnWriteArrayList<>();

        // 创建多个线程来测试并发生成序列号
        ExecutorService executorService = Executors.newFixedThreadPool(10);
        for (int i = 0; i < 1000; i++) {
            executorService.submit(() -> {
                int seq = SequenceGenerator.INSTANCE.getNextSequenceNumber();
                sequenceNumbers.add(seq);
            });
        }
        executorService.shutdown();
        try {
            executorService.awaitTermination(1, TimeUnit.MINUTES);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        // 输出所有生成的序列号,检查是否有重复
        System.out.println(sequenceNumbers);
        System.out.println("Total generated sequences: " + sequenceNumbers.size());
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45

Inde output est
Insert imaginem descriptionis hic

In hoc exemplo, SequenceGenerator est recensio classis quae proprium ordinem Numerum campum ad numerum currentem reponendum. Modus getNextSequenceNumber filo-tutus est quia synchronised declaratur, eo quod ordo pugnarum numerus in multi- bili ambitu non occurret.
In genere SequenceGeneratoris Testis, servitii exsecutoris utimur ad ambitum concurrentem simulare, et filo tuto uti CopyOnWriteArrayList colligendi numeros seriei generatos ut rectitudo sequentium numerorum cognoscatur.
Quaeso note quod, licet keyword synchronised salutem sequelam in tuto collocaverit, effectum in missionum concursu magno afficiat. Si numerus generans sequentia laborare debet sub concursu altissimo, considerare debes algorithmum efficaciorem, ut variabilium atomorum utens (qualis AtomicInteger) vel ordo distributus numeri generationis.