精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Java中的懶惰實例化與急切實例化:哪個更好?

譯文
開發 前端
當實例化在資源使用方面開銷很大的Java對象時,用戶不希望每次使用它們時都必須進行實例化。對于提高性能來說,擁有一個可以在整個系統中共享的現成對象實例要好得多。在這種情況下,懶惰實例化策略非常有效。

?譯者 | 李睿

審校 | 孫淑娟

人們需要了解如何在Java程序中使用懶惰實例化和急切實例化。那么,哪種方法更好?這取決于場景。  

當實例化在資源使用方面開銷很大的Java對象時,用戶不希望每次使用它們時都必須進行實例化。對于提高性能來說,擁有一個可以在整個系統中共享的現成對象實例要好得多。在這種情況下,懶惰實例化策略非常有效。

懶惰實例化也有一些缺點,而在某些系統中,采用急切實例化方法更好。在急切實例化中,通常在應用程序啟動后立即實例化對象一次。這兩種方法是不同的。而在某些情況下,某種方法最有效。

本文將介紹這兩種實例化Java對象的方法。首先看到代碼示例,然后用Java代碼挑戰測試所學到的內容。此外,還將討論懶惰實例化與急切實例化的優缺點。

1.懶惰實例化的簡單方法

首先,了解創建單個實例并在系統中共享它的簡單方法:

public static HeroesDB heroesDB;           // #A
private SingletonNaiveApproach() {} // #B

public HeroesDB getHeroesDB() { // #C
if (heroesDB == null) { // #D
heroesDB = new HeroesDB(); // #E
}

return heroesDB; // #F
}
static class HeroesDB { }
}

下面是代碼中發生的情況:

開始(#A),聲明一個靜態內部類HeroesDB。將變量聲明為靜態的變量,它可以在應用程序中共享。

下一步(#B),創建一個私有構造函數,以避免從類外部直接實例化。因此,必須使用getHeroes()方法來獲取一個實例。

在下一行(#C),看到了有效地從HeroesDB返回實例的方法。

接下來(#D),檢查heroesDB實例是否為空。如果是空,將創建一個新實例。否則什么也不做。

最后(#F),返回heroesDB對象實例。

這種方法適用于小型應用程序。然而,在有許多用戶的大型多線程應用程序中,很可能會出現數據沖突。在這種情況下,對象可能會被多次實例化,即使檢查是否為空。以下進一步探討為什么會發生這種情況的原因。

2.理解競態條件

競態條件是指兩個或多個線程并發競爭同一個變量的情況,這可能會導致意外的結果。

在大型多線程應用程序中,許多進程并行并發地運行。在這種類型的應用程序中,有可能在另一個線程實例化一個空對象的同時,一個線程正在詢問一個對象是否為空。在這種情況下,有一個競態條件,這可能導致重復的實例。

可以通過使用synchronized關鍵字來修復這個問題:

public class SingletonSynchronizedApproach {

public static HeroesDB heroesDB;
private SingletonSynchronizedApproach() {}

public synchronized HeroesDB getHeroesDB() {
if (heroesDB == null) {
heroesDB = new HeroesDB();
}

return heroesDB;
}

static class HeroesDB { }

}

這段代碼解決了線程在getHeroesDB()中存在沖突的問題。然而正在同步整個方法。這可能會影響性能,因為每次只有一個線程能夠訪問整個方法。

以下看看如何解決這個問題。

3.優化的多線程懶惰實例化

要同步getHeroesDB()方法中的策略點,需要在該方法中創建同步塊。以下是一個例子:

public class ThreadSafeSynchronized {

public static volatile HeroesDB heroesDB;

public static HeroesDB getHeroesDB() {
if(heroesDB == null) {
synchronized (ThreadSafeSynchronized.class) {
if(heroesDB == null) {
heroesDB = new HeroesDB();
}
}
}
return heroesDB;
}

static class HeroesDB { }
}

左右滑動查看完整代碼

在這段代碼中,只在實例為空時同步對象的創建。否則,將返回對象實例。

還要注意的是,同步了ThreadSafeSynchronized類,因為使用的是靜態方法。然后再次檢查,以確保heroesDB實例仍然為空,因為可能有另一個線程已將其實例化。如果不進行雙重檢查,可能會得到多個實例。

另一個重要的問題是,變量heroesDB是不穩定的。這意味著不會緩存變量的值。當線程更改這一變量時,它將始終具有最新更新的值。

4.何時使用急切實例化

對于可能從未使用過的開銷大的對象,最好使用懶惰實例化。然而,如果所處理的對象知道在應用程序每次啟動時都將被使用,并且就使用的系統資源來說,如果創建對象開銷很大,那么最好使用急切實例化。

假設必須創建一個開銷非常大的對象,例如人們總是需要的數據庫連接。等待該對象被使用可能會降低應用程序的運行速度。在這種情況下,急切實例化更有意義。

5.實現急切實例化的簡單方法

實現急切實例化的簡單方法如下:

public class HeroesDatabaseSimpleEager {

public static final HeroesDB heroesDB = new HeroesDB();

static HeroesDB getHeroesDB() {
return heroesDB;
}

static class HeroesDB {
private HeroesDB() {
System.out.println("Instantiating heroesDB eagerly...");
}

@Override
public String toString() {
return "HeroesDB instance";
}
}

public static void main(String[] args) {
System.out.println(HeroesDatabaseSimpleEager.getHeroesDB());
}
}
The output from this code would be:

Instantiating heroesDB eagerly...
HeroesDB instance

這段代碼的輸出是:

Instantiating heroesDB eagerly...
HeroesDB instance

注意,在本例中沒有進行是為空的檢查。當HeroesDB被聲明為HeroesDatabaseSimpleEager中的實例變量時,它就被實例化了。因此,每次訪問HeroesDatabaseSimpleEager類時,都會從HeroesDB獲得一個實例。還重寫了toString()方法,以簡化HeroesDB實例的輸出。

現在看看使用枚舉實現急切實例化的更健壯的方法。

6.使用枚舉創建急切實例化

使用枚舉是創建急切實例化對象的一種更健壯的方法。盡管實例只會在枚舉被訪問時被創建,但要注意在下面的代碼中,沒有對對象創建進行是否為空的檢查:

public enum HeroesDatabaseEnum {

INSTANCE;
int value;
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
public static void main(String[] args) {
System.out.println(HeroesDatabaseEnum.INSTANCE);

}

這段代碼的輸出將是:

Creating instance...
INSTANCE

這段代碼是線程安全的。它保證只創建一個實例,并且序列化對象,這意味著可以更容易地傳輸它。另一個細節是,對于枚舉有一個隱式的私有構造函數,這保證了不會不必要地創建多個實例。枚舉被認為是使用急切實例化的最佳方法之一,因為它簡單而有效。

7.懶惰實例化vs.急切實例化

當不總是需要實例化一個對象時,采用懶惰實例化更好。當知道總是需要實例化對象時,急切實例化更好。以下是每種方法的優缺點:

(1)懶惰實例化

優點:對象只會在需要的時候被實例化。

缺點:

  • 需要同步才能在多線程環境中工作。
  • 由于if檢查和同步,性能會變慢。
  • 當需要該對象時,應用程序可能會有明顯的懶惰。

(2)急切實例化

優點:

  • 在大多數情況下,對象將在應用程序啟動時被實例化。
  • 使用對象時沒有延遲,因為它已經被實例化了。
  • 它在多線程環境中工作良好。

缺點:使用這種方法可能會不必要地實例化對象。

8.Lazy Homer beer創作挑戰

在下面的Java代碼挑戰中,將看到多線程環境中發生的懶惰實例化。

要注意的是,正在使用ThreadPool可以直接使用Thread類,但最好使用Java并發API。

根據在本文中學到的知識,人們會認為在運行以下代碼時最可能發生什么情況?

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
public class LazyHomerBeerCreationChallenge {

public static int i = 0;
public static Beer beer;

static void createBeer() {
if (beer == null) {
try {
Thread.sleep(200);
beer = new Beer();
i++;
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

public static void main(String[] args) throws InterruptedException {
ExecutorService executor = Executors.newFixedThreadPool(2);
executor.submit(LazyHomerChallenge::createBeer);
executor.submit(LazyHomerChallenge::createBeer);

executor.awaitTermination(2, TimeUnit.SECONDS);
executor.shutdown();
System.out.println(i);
}

public static class Beer {}
}

以下是應對這一挑戰的選項。仔細查看代碼并選擇其中一個:

1.A) 1

2.B) 0

3.C) 2

4.D)拋出InterruptedException

9.發生了什么?懶惰實例化解釋

這個代碼挑戰的關鍵概念是,當兩個線程訪問同一個進程時,會出現并行性。因此,既然有一個線程。在實例化beer之前休眠,很可能會創建兩個beer實例。

線程不并發運行的可能性非常小,這取決于JVM實現。但是由于線程的原因,很有可能最終得到兩個Thread.sleep的方法。

現在再次查看代碼,注意正在使用線程池創建兩個線程,然后對這些線程運行createBear方法。

因此,這個代碼挑戰的正確答案是:C,或2的值。

10.結論

對于使用開銷大的對象優化性能來說,懶惰實例化和急切實例化是很重要的概念。以下是關于這些設計策略需要記住的要點:

  • 懶惰實例化需要在實例化之前進行是否為空的檢查。
  • 在多線程環境中同步對象以實現懶惰實例化。
  • 急切實例化不需要對對象進行是否為空的檢查。
  • 使用枚舉是一種有效且簡單的緊急實例化方法。

原文鏈接:https://www.infoworld.com/article/3675954/lazy-vs-eager-instantiation-in-java-which-is-better.htm

責任編輯:武曉燕 來源: 51CTO技術棧
相關推薦

2009-07-10 09:30:41

SwingWorker

2012-05-23 12:55:39

Java實例化

2011-12-31 15:57:21

Java

2009-09-18 16:32:51

Linq委托實例化

2019-07-18 11:00:45

自動化運維測試

2013-03-04 11:10:03

JavaJVM

2020-10-22 08:52:52

Python數據集可視化

2024-01-02 10:54:07

Rust結構體元組

2009-09-25 11:06:38

Hibernate實例

2013-02-20 15:01:59

JSONAndroid開發

2009-07-09 00:25:00

Scala參數化

2009-07-20 15:08:41

Spring實例化Be

2018-01-24 09:00:00

2020-10-21 08:05:45

Scrapy

2009-09-09 15:54:48

C# XML序列化

2010-04-20 16:10:09

虛擬化

2009-09-09 15:47:27

XML序列化和反序列化

2009-08-28 11:09:35

C#數組初始化

2024-04-11 13:18:26

C++泛型編程

2021-05-31 08:57:31

Xcode與Andro
點贊
收藏

51CTO技術棧公眾號

精品在线观看免费| 国产系列在线观看| 神马影视一区二区| 日韩欧美精品中文字幕| 欧美肥婆姓交大片| 无码人妻一区二区三区免费n鬼沢 久久久无码人妻精品无码 | 久久婷婷av| 亚洲午夜色婷婷在线| 国产精品视频分类| 自由的xxxx在线视频| 国产成人高清在线| 欧美日韩成人精品| 水蜜桃av无码| **国产精品| 午夜精品久久久久久久99水蜜桃| 四虎一区二区| 国产一区二区三区中文字幕| 精品999日本| 色偷偷噜噜噜亚洲男人的天堂| yjizz视频| 日本韩国欧美| 亚洲丝袜自拍清纯另类| 美国av一区二区三区| 国产精品色综合| 国产精品婷婷| 久久久久久国产精品久久| 美国一级黄色录像| 91精品国产自产精品男人的天堂| 欧美午夜电影在线| 人人妻人人做人人爽| 三区四区电影在线观看| 久久视频一区二区| 成人看片人aa| 亚洲av综合一区| 极品日韩av| 中文字幕精品一区久久久久| 美女流白浆视频| 自拍偷拍亚洲| 欧美日韩激情一区二区| 91免费黄视频| 91欧美在线视频| 国产性天天综合网| 国内精品国语自产拍在线观看| 91精品中文字幕| 日韩国产精品91| 日本在线精品视频| 男女啊啊啊视频| 99国产精品自拍| 欧美黑人xxx| 亚洲综合久久av一区二区三区| 偷窥自拍亚洲色图精选| 亚洲国语精品自产拍在线观看| 91av免费观看| 欧美日韩大片| 精品女同一区二区三区在线播放| 亚洲 欧洲 日韩| 欧美日韩在线看片| 国产精品免费久久久久| 亚洲欧洲精品一区二区| 最新97超碰在线| 国产精品短视频| 黄色一级片网址| 在线a人片免费观看视频| 国产日产精品1区| 日韩av高清在线播放| 国产精品二线| 国产欧美一区二区精品秋霞影院 | 99精品在线观看| 久久九九精品99国产精品| 国产高潮流白浆| 偷拍一区二区| 最近2019年日本中文免费字幕| 国产黄色大片免费看| 欧美裸体在线版观看完整版| 日日噜噜噜夜夜爽亚洲精品| 午夜精品一区二区三区视频| 欧美日本一区二区视频在线观看| www.日韩视频| 国产无码精品视频| 国产精品视频久久一区| 国产精品久久久久久久美男| 国产免费不卡视频| 久久成人免费网站| 国产精品嫩草视频| av免费在线不卡| www.亚洲免费av| 久久精品国产精品国产精品污| 欧美扣逼视频| 成人av综合在线| 看欧美日韩国产| 你懂的视频在线免费| 午夜视频福利在线观看| 亚洲免费一区三区| 亚洲国产精品热久久| 小早川怜子久久精品中文字幕| 成人羞羞动漫| 欧美激情免费看| 国产精品51麻豆cm传媒 | 国产一级在线| 亚洲视频免费在线| 黄页网站在线观看视频| 亚洲精品国产精品国产| 欧美日韩亚洲综合一区二区三区 | 夜夜嗨av禁果av粉嫩avhd| 懂色av一区二区三区免费观看| 免费亚洲精品视频| 成人a在线视频免费观看| 欧美视频在线视频| 丰满人妻一区二区三区53视频| 免费成人网www| xxxx性欧美| 69视频免费在线观看| 日本va欧美va欧美va精品| 成人国内精品久久久久一区| 性xxxfllreexxx少妇| 亚洲另类在线制服丝袜| 99视频在线免费播放| 天堂√中文最新版在线| 日韩欧美一区在线| 在线观看免费黄色网址| 国产精品日韩精品欧美精品| 97se亚洲综合| 黄网页在线观看| 色婷婷综合视频在线观看| 免费不卡av网站| 中文精品一区二区| 精品综合久久久久久97| 一区二区日韩在线观看| 26uuu另类欧美亚洲曰本| 中文字幕久久一区| 五月激情久久| 亚洲男人第一av网站| 日本亚洲色大成网站www久久| 经典一区二区三区| 三区精品视频观看| xxx欧美xxx| 亚洲国模精品一区| 国产精品7777777| 成人午夜伦理影院| 隔壁人妻偷人bd中字| 精品一区二区三区中文字幕视频| 中文字幕欧美亚洲| 亚洲第一区av| 欧美激情一区二区三区| av女优在线播放| 精品亚洲免a| 免费av在线一区| 中文字幕一区二区在线视频| 国产日韩精品一区二区三区在线| 日本一道本久久| 日韩在线黄色| 欧美亚洲激情在线| 深夜福利在线视频| 亚洲综合视频在线观看| 韩国三级在线播放| 狠狠爱综合网| 国产精品v欧美精品v日韩| 午夜不卡视频| 日韩一区二区三区四区| 九九热精品免费视频| 国产成a人无v码亚洲福利| 久久综合久久久久| 视频免费一区二区| 欧美国产日韩在线| 五月婷婷丁香六月| 色94色欧美sute亚洲线路二| 日韩网站在线播放| 日本aⅴ精品一区二区三区| 色一情一乱一伦一区二区三区丨| 免费在线成人激情电影| 日日狠狠久久偷偷四色综合免费 | 91精品麻豆日日躁夜夜躁| 少妇被躁爽到高潮无码文| 成人激情免费网站| 免费黄色福利视频| 日韩精品一区二区三区免费观看| 日韩美女主播视频| 黄网站免费在线播放| 欧美精品一区二区三区高清aⅴ| 国产午夜小视频| 国产片一区二区| 久久久精品高清| 伊人久久久大香线蕉综合直播| 韩国成人一区| 国产精品伊人| 欧美激情中文网| 深夜福利在线视频| 7777精品伊人久久久大香线蕉经典版下载 | 国产精品极品在线观看| 欧美亚洲日本黄色| 18视频免费网址在线观看| 欧美日精品一区视频| 久久久久久久久久久久久久久久久 | 下面一进一出好爽视频| 亚洲欧美日韩视频二区| 亚洲一区二区不卡视频| 国产精品videossex| 日韩免费在线观看视频| 性欧美videoshd高清| 日韩精品极品在线观看播放免费视频| 午夜精品久久久久久久蜜桃| 一区二区三区久久| 大又大又粗又硬又爽少妇毛片| 极品美女销魂一区二区三区免费| 成人午夜视频在线观看免费| 欧美高清视频手机在在线| 99视频免费观看蜜桃视频| 小早川怜子影音先锋在线观看| x99av成人免费| 欧美777四色影视在线| 日韩欧美亚洲另类制服综合在线| www.亚洲激情| 性感美女久久精品| 欧美大片xxxx| 国产欧美日韩一区二区三区在线观看| 午夜性福利视频| 日本伊人午夜精品| 久在线观看视频| 欧美精品大片| 日本一区二区精品| 欧美美女在线直播| 超碰97国产在线| 国产精品1区| 国产精品久在线观看| 亚洲人体视频| 91精品国产一区| 麻豆福利在线观看| 久久色在线播放| 婷婷在线视频| 一本一本久久a久久精品牛牛影视 一本色道久久综合亚洲精品小说 一本色道久久综合狠狠躁篇怎么玩 | 国产精品免费一区二区三区| 久久久免费人体| 国产精品久久久av| 小黄鸭精品aⅴ导航网站入口| 久久久精品久久| 亚洲成人三级| 日韩网站免费观看| 91精彩视频在线观看| 国产亚洲精品91在线| 久久手机免费观看| 亚洲国产美女精品久久久久∴| www.色亚洲| 欧美一区二区三区四区五区| 国产精品国产精品国产专区| 欧美在线不卡一区| av毛片在线免费观看| 日韩欧美国产黄色| 国产无套内射又大又猛又粗又爽| 一区二区三区高清| 国产一级免费av| 午夜亚洲福利老司机| 日韩免费av片| 欧美日韩中文字幕在线| 全网免费在线播放视频入口| 亚洲品质自拍视频网站| 一区二区在线观看免费视频| 国产精品你懂的在线| 精品国产大片大片大片| 国产精品美女久久久久av爽李琼| 在线观看国产网站| 久久久91精品国产一区二区精品| 老牛影视av老牛影视av| 97久久精品人人澡人人爽| 国产精品久久久免费观看| 久久久久久亚洲综合影院红桃| 国产精品毛片一区二区| 国产精品天美传媒| 天海翼在线视频| 亚洲无人区一区| 日韩av在线播| 在线视频国产一区| 国产乱码精品一区二区| 精品国产第一区二区三区观看体验| 亚洲av无码一区二区三区性色| 亚洲经典中文字幕| 青青操在线视频| 日韩资源在线观看| 黄网在线免费看| 亚洲3p在线观看| 99久久亚洲国产日韩美女 | 国产女人18毛片水18精| 日韩亚洲欧美一区二区三区| 在线观看免费黄色小视频| 在线综合亚洲欧美在线视频| 欧美日韩亚洲一| www国产在线观看| 色综合影院在线| 黄页网站在线观看免费| 国产999在线| 久久精品国产福利| 亚洲xxxx视频| 亚洲精品小区久久久久久| 亚洲欧美国产一区二区| 91精品久久久久久久久久不卡| 欧美 丝袜 自拍 制服 另类| 麻豆91在线观看| 国内自拍偷拍视频| 国产精品天天看| 久久久久久久久久影院| 欧美高清激情brazzers| 天堂成人在线| 欧美猛交免费看| 国产精品诱惑| 免费亚洲精品视频| 亚洲激情不卡| 超碰超碰在线观看| 97超碰欧美中文字幕| 手机看片国产日韩| 精品美女国产在线| www.97av| 伊人久久男人天堂| 欧美家庭影院| 成人国产在线视频| 欧美一级精品| 800av在线免费观看| 久久国产精品无码网站| 精品国产av色一区二区深夜久久| 最新国产精品久久精品| 中文字幕在线观看视频免费| 亚洲国产精品一区二区久| 性xxxfreexxxx性欧美| 97av在线视频免费播放| 国产午夜亚洲精品一级在线| 日韩欧美精品一区二区| 先锋亚洲精品| 少妇伦子伦精品无吗| 《视频一区视频二区| 色老头一区二区| 亚洲人成绝费网站色www| 美女露胸视频在线观看| 国产高清精品一区二区| 欧美性感美女一区二区| 97视频在线免费播放| 不卡一区二区中文字幕| 亚洲色成人网站www永久四虎| 亚洲成a人v欧美综合天堂下载 | 不卡av影片| 国产亚洲精品久久飘花| 欧美片第1页综合| 人妻换人妻仑乱| 欧美高清在线视频| 最近国语视频在线观看免费播放| 亚洲色无码播放| 天天免费亚洲黑人免费| 免费久久99精品国产自| 欧美va亚洲va日韩∨a综合色| 亚洲制服中文字幕| 亚洲毛片av在线| 亚洲AV无码精品色毛片浪潮| 操日韩av在线电影| 性欧美video另类hd尤物| 正在播放一区| 国产精品一区二区在线观看不卡| www.av视频| 91麻豆精品国产91| 超碰公开在线| 国产精品久久国产三级国电话系列| 国产精品va| jjzz黄色片| 精品福利在线看| 国产在线你懂得| 91精品久久久久久久久久入口| 中文一区一区三区免费在线观看| 一级片免费在线观看视频| 亚洲综合视频网| 日本v片在线免费观看| 992tv在线成人免费观看| 久操精品在线| 一女二男3p波多野结衣| 亚洲乱码日产精品bd| 天天操天天舔天天干| 欧美专区中文字幕| 欧美顶级大胆免费视频| 18禁一区二区三区| 欧美性色19p| 色大18成网站www在线观看| 成人片在线免费看| 亚洲专区一区| 国产精品无码久久久久一区二区| 欧美系列在线观看| 少女频道在线观看高清 | 国产欧美日韩影院| 亚洲 欧美 日韩系列| 国产精品免费人成网站| 色屁屁草草影院ccyycom| 国产精品精品一区二区三区午夜版 | 丁香花在线电影小说观看| 欧美一级日本a级v片| 精品影院一区二区久久久| 男女性高潮免费网站| 日韩精品高清在线| 欧州一区二区三区| av观看免费在线| 国产精品亲子乱子伦xxxx裸| 人人妻人人玩人人澡人人爽| 国产精品揄拍一区二区| 亚洲情侣在线| 一区二区三区在线观看免费视频| 日韩欧美一级二级三级久久久| 欧美黑人疯狂性受xxxxx野外|