国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Rumah Java Javabermula 詳細(xì)介紹單例模式

詳細(xì)介紹單例模式

Aug 10, 2020 pm 04:29 PM
Corak singleton

詳細(xì)介紹單例模式

首先我們來(lái)看看單例模式的定義:

單例模式是 Java 中最簡(jiǎn)單的設(shè)計(jì)模式之一,屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對(duì)象的最佳方式。單例模式涉及到一個(gè)單一的類,該類負(fù)責(zé)創(chuàng)建自己的對(duì)象,同時(shí)確保只有單個(gè)對(duì)象被創(chuàng)建。

(推薦教程:java入門教程

為了保證內(nèi)存中有且僅有一個(gè)對(duì)象,避免頻繁的創(chuàng)建對(duì)象造成對(duì)內(nèi)存的消耗,讓所有需要調(diào)用這個(gè)對(duì)象的地方都使用這一個(gè)單例對(duì)象。

接下來(lái)我們看看單例模式的類型:

1、懶漢式

懶漢式指的是在需要使用的時(shí)候才會(huì)去創(chuàng)建該單例對(duì)象。

懶漢式單例模式實(shí)現(xiàn):

public class Singleton {
	private static Singleton singleton;
	private Singleton(){
	
	}
	public static Singleton getInstance(){
		if (singleton == null) {
			singleton = new Singleton();
	    }
	    return singleton;
}

對(duì)于懶漢式單例實(shí)現(xiàn)存在一個(gè)問(wèn)題,就是如何確保只創(chuàng)建一個(gè)對(duì)象?若兩個(gè)或多個(gè)線程同時(shí)判斷singleton為空,則會(huì)創(chuàng)建多個(gè)對(duì)象。因此我們需要解決線程安全問(wèn)題。

說(shuō)到線程安全想到的就是加鎖了,加鎖無(wú)非是在方法或者類對(duì)象上加鎖。

//在方法上加鎖
public class Singleton {
	private static Singleton singleton;
	private Singleton(){}
	public static synchronized Singleton getInstance() {
    	if (singleton == null) {
        	singleton = new Singleton();
    	}
    return singleton;
	}
}

//在類對(duì)象上加鎖
public class Singleton {
	private static Singleton singleton;
	private Singleton(){}
	public static Singleton getInstance() {
    synchronized(Singleton.class) {   
        if (singleton == null) {
            singleton = new Singleton();
        }
    }
    return singleton;
	}	
}

這兩個(gè)方法,能解決多線程同時(shí)創(chuàng)建單例對(duì)象的問(wèn)題,但每次獲取對(duì)象都需要先獲取鎖,并發(fā)性能差。因此還需要優(yōu)化,優(yōu)化目標(biāo)為:如果沒(méi)有實(shí)例化對(duì)象,則加鎖創(chuàng)建,如果有實(shí)例化對(duì)象,則直接返回。

(學(xué)習(xí)視頻推薦:java課程

對(duì)于在方法上加鎖,無(wú)論是否存在實(shí)例化對(duì)象都需要加鎖。故我們需要優(yōu)化的是在類對(duì)象上加鎖。

//DCL單例模式(Double Check + Lock)
public class Singleton {
	//volatite關(guān)鍵詞防止指令重排序,下文介紹
	private static volatile Singleton singleton;
	private Singleton(){}
	public static Singleton getInstance() {
	//如果singleton不為空,則直接返回對(duì)象,若多個(gè)線程發(fā)現(xiàn)singleton為空,則進(jìn)入分支
		if (singleton == null) {
		//多個(gè)線程同時(shí)爭(zhēng)搶一個(gè)鎖,只有一個(gè)線程能成功,其他線程需等待
			synchronized(Singleton.class) {
			//爭(zhēng)搶到鎖的線程需再次判斷singleton是否為空,因?yàn)橛锌赡鼙簧蟼€(gè)線程實(shí)例化了
			//若不為空則實(shí)例化,后續(xù)線程再進(jìn)入的時(shí)候則直接返回該對(duì)象
			//對(duì)于之后所有進(jìn)入該方法的線程則無(wú)需獲取鎖,直接返回對(duì)象   
        	if (singleton == null) {
           		singleton = new Singleton();
        	}
    		}
		}
    	return singleton;
	}	
}

上述代碼中添加了volatile關(guān)鍵詞防止指令重排序。

2、餓漢式

餓漢式指的是在類加載時(shí)即創(chuàng)建該單例對(duì)象。

餓漢式單例模式實(shí)現(xiàn):

public class Singleton {
	private static final Singleton singleton = new Singleton();
	private Singleton(){
	
	}
	public static Singleton getInstance(){
		return singleton;
	}

總結(jié):

懶漢式:需要時(shí)才去實(shí)例化對(duì)象,在開(kāi)發(fā)中如果對(duì)內(nèi)存要求很高即采用懶漢式,在多線程環(huán)境下,應(yīng)該使用DCL單例模式,使用DCL單例模式,解決了并發(fā)安全及性能低下的問(wèn)題,若添加volatile關(guān)鍵詞還能防止指令重排序而發(fā)生的NPE異常。

餓漢式:?類加載時(shí)就已經(jīng)實(shí)例化對(duì)象,如果對(duì)內(nèi)存要求不高即采用餓漢式,簡(jiǎn)單不易出錯(cuò),且沒(méi)有任何并發(fā)安全和性能問(wèn)題。

Atas ialah kandungan terperinci 詳細(xì)介紹單例模式. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial PHP
1502
276
Satu artikel untuk memahami corak tunggal dalam JavaScript Satu artikel untuk memahami corak tunggal dalam JavaScript Apr 25, 2023 pm 07:53 PM

Corak singleton JS ialah corak reka bentuk yang biasa digunakan yang memastikan bahawa kelas hanya mempunyai satu contoh. Mod ini digunakan terutamanya untuk mengurus pembolehubah global untuk mengelakkan konflik penamaan dan pemuatan berulang. Ia juga boleh mengurangkan penggunaan memori dan meningkatkan kebolehselenggaraan dan skalabiliti.

Pemikiran tentang isu keselamatan benang dalam mod tunggal dalam PHP Pemikiran tentang isu keselamatan benang dalam mod tunggal dalam PHP Oct 15, 2023 am 10:14 AM

Memikirkan isu keselamatan benang bagi mod tunggal dalam PHP Dalam pengaturcaraan PHP, mod tunggal ialah corak reka bentuk yang biasa digunakan Ia boleh memastikan bahawa kelas hanya mempunyai satu contoh dan menyediakan pusat akses global untuk mengakses kejadian ini. Walau bagaimanapun, apabila menggunakan corak tunggal dalam persekitaran berbilang benang, isu keselamatan benang perlu dipertimbangkan. Pelaksanaan paling asas bagi corak tunggal termasuk pembina persendirian, pembolehubah statik persendirian, dan kaedah statik awam. Kod khusus adalah seperti berikut: classSingleton{pr

Aplikasi mod tunggal dan mod kilang dalam fungsi C++ membebankan dan menulis semula Aplikasi mod tunggal dan mod kilang dalam fungsi C++ membebankan dan menulis semula Apr 19, 2024 pm 05:06 PM

Corak Singleton: Sediakan contoh tunggal dengan parameter berbeza melalui lebihan fungsi. Corak kilang: Cipta pelbagai jenis objek melalui penulisan semula fungsi untuk memisahkan proses penciptaan daripada kelas produk tertentu.

Bermula dengan PHP: Corak Singleton Bermula dengan PHP: Corak Singleton May 20, 2023 am 08:13 AM

Dalam pembangunan perisian, kita sering menghadapi situasi di mana berbilang objek perlu mengakses sumber yang sama. Untuk mengelakkan konflik sumber dan meningkatkan kecekapan program, kami boleh menggunakan corak reka bentuk. Antaranya, corak tunggal ialah cara yang biasa digunakan untuk mencipta objek, yang memastikan bahawa kelas hanya mempunyai satu contoh dan menyediakan akses global. Artikel ini akan memperkenalkan cara menggunakan PHP untuk melaksanakan corak tunggal dan memberikan beberapa cadangan amalan terbaik. 1. Apakah mod tunggal? Mod tunggal adalah cara yang biasa digunakan untuk mencipta objek. Ciri-cirinya adalah untuk memastikan bahawa kelas hanya mempunyai satu contoh

Dalam PHP, apakah konsep corak reka bentuk tunggal? Dalam PHP, apakah konsep corak reka bentuk tunggal? Aug 18, 2023 pm 02:25 PM

Corak Singleton memastikan bahawa kelas hanya mempunyai satu contoh dan menyediakan pusat akses global. Ia memastikan bahawa hanya satu objek tersedia dan terkawal dalam aplikasi. Corak Singleton menyediakan cara untuk mengakses objek uniknya secara langsung tanpa membuat instantiating objek kelas. Contoh<?php classdatabase{ publicstatic$connection;

Corak Reka Bentuk PHP: Laluan ke Kecemerlangan Kod Corak Reka Bentuk PHP: Laluan ke Kecemerlangan Kod Feb 21, 2024 pm 05:30 PM

Pengenalan Corak reka bentuk PHP ialah satu set penyelesaian yang terbukti kepada cabaran biasa dalam pembangunan perisian. Dengan mengikut corak ini, pembangun boleh mencipta kod yang elegan, teguh dan boleh diselenggara. Mereka membantu pembangun mengikuti prinsip SOLID (tanggungjawab tunggal, tertutup terbuka, penggantian Liskov, pengasingan antara muka dan penyongsangan kebergantungan), dengan itu meningkatkan kebolehbacaan kod, kebolehselenggaraan dan kebolehskalaan. Jenis Corak Reka Bentuk Terdapat banyak corak reka bentuk yang berbeza, masing-masing mempunyai tujuan dan kelebihan tersendiri. Berikut ialah beberapa corak reka bentuk PHP yang paling biasa digunakan: Corak Singleton: Memastikan kelas hanya mempunyai satu tika dan menyediakan cara untuk mengakses tika ini secara global. Corak Kilang: Mencipta objek tanpa menyatakan kelas tepatnya. Ia membolehkan pemaju bersyarat

Senario aplikasi dan proses keselamatan benang bagi mod tunggal dalam sistem teragih PHP Senario aplikasi dan proses keselamatan benang bagi mod tunggal dalam sistem teragih PHP Oct 15, 2023 pm 04:48 PM

Senario aplikasi dan proses keselamatan benang mod tunggal dalam sistem teragih PHP Pengenalan: Dengan perkembangan pesat Internet, sistem teragih telah menjadi topik hangat dalam pembangunan perisian moden. Dalam sistem teragih, keselamatan benang sentiasa menjadi isu penting. Dalam pembangunan PHP, corak tunggal ialah corak reka bentuk yang biasa digunakan, yang boleh menyelesaikan masalah perkongsian sumber dan keselamatan benang dengan berkesan. Artikel ini akan menumpukan pada senario aplikasi dan proses keselamatan benang bagi corak tunggal dalam sistem teragih PHP dan menyediakan contoh kod khusus. 1. Mod tunggal

Apakah corak singleton dalam javascript? Apakah corak singleton dalam javascript? May 23, 2025 pm 11:09 PM

Corak Singleton memastikan bahawa kelas hanya mempunyai satu contoh dan menyediakan titik akses global dalam JavaScript. 1) Gunakan penutupan dan IIFE untuk mencapai keunikan dan akses global. 2) Tetapi perhatian harus dibayar kepada pengurusan negara global, ujian unit dan isu skalabilitas. 3) Adalah disyorkan untuk meminimumkan keadaan global, mempertimbangkan alternatif, dan melaksanakan reka bentuk modular.

See all articles