精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

日日摸夜夜添夜夜添亚洲女人| 日韩激情美女| 久久一区精品| 欧美精品一区二区三区高清aⅴ | 操人视频在线观看欧美| 亚洲 国产 图片| 黄网页在线观看| 狠狠色伊人亚洲综合成人| www.亚洲天堂| 人妻精油按摩bd高清中文字幕| 91精品久久久| 粉嫩aⅴ一区二区三区四区五区| 九色成人免费视频| 精品久久久久一区二区| 蜜桃麻豆av在线| hitomi一区二区三区精品| 78m国产成人精品视频| 国产精品揄拍100视频| 婷婷六月国产精品久久不卡| 国产日本欧洲亚洲| 成人免费看吃奶视频网站| 欧美色图17p| 免费欧美网站| 黑人巨大精品欧美一区免费视频 | 欧美午夜精品久久久久免费视| 波多野结衣视频观看| 欧美大片aaaa| 日韩欧美黄色影院| 久久精品.com| 国产激情在线视频| 高清在线观看日韩| 日韩av第一页| 91成人福利视频| 精品无人区一区二区| 91久久人澡人人添人人爽欧美| 亚洲一区二区精品在线观看| 亚洲精品18在线观看| 久久一二三四| 欧美精品日韩三级| 中文字幕在线免费看线人| 成人免费在线观看视频| 一区二区成人在线| 久久久99爱| 中文在线字幕免费观| 亚洲精一区二区三区| 日韩有码视频在线| 国产男男chinese网站| 岛国精品在线| 精品久久久久久久久久久久久久 | 成人av电影免费| 亚洲大尺度在线观看| 欧美欧美天天天天操| 亚洲日韩中文字幕在线播放| 国产无套精品一区二区三区| 日韩影片中文字幕| 夜夜嗨av一区二区三区四季av| 日韩高清在线播放| 亚洲第一成年人网站| 日本va欧美va精品发布| 久久免费国产精品1| 午夜爱爱毛片xxxx视频免费看| 日韩av系列| 欧美成人一区二区三区片免费| 国产区二区三区| 蜜桃av在线| 亚洲午夜久久久久久久久电影网 | kk眼镜猥琐国模调教系列一区二区| 国产精品一区二区三区免费视频| 青青草免费观看视频| 亚洲特色特黄| 美女av一区二区三区| 99在线视频免费| 免费观看久久av| 亚洲精品v欧美精品v日韩精品| 欧美色图校园春色| 91精品亚洲一区在线观看| 欧美在线999| 国产精品欧美激情在线观看| av在线最新| 亚洲成人黄色影院| 亚洲高潮无码久久| 中文字幕伦理免费在线视频| 国产性做久久久久久| 久久综合给合久久狠狠色| 日韩一级免费视频| 91一区二区三区在线观看| 国产日本一区二区三区| 天堂av资源在线| av综合在线播放| 国产精华一区二区三区| 好吊色在线观看| 成人精品鲁一区一区二区| 成人做爰66片免费看网站| 日本国产在线观看| 91丨九色丨国产丨porny| 久久久久久久久久久久久9999| 欧美一区二不卡视频| 成人动漫中文字幕| 噜噜噜噜噜久久久久久91| 丝袜视频国产在线播放| 国产视频不卡一区| 久久久久久黄色| 久久视频免费观看| 精品人妻伦九区久久aaa片| 中文字幕人成人乱码| 久久999免费视频| 亚洲国产精品午夜在线观看| 亚洲美女色禁图| 久久久久国产精品免费网站| 日本一区二区不卡在线| 亚洲精品色图| 国产激情999| 国产精品久久免费| 不卡av电影在线播放| 久久综合伊人77777麻豆| chinese偷拍一区二区三区| 日韩毛片在线免费观看| 青青青在线观看视频| 手机在线观看av网站| 在线观看视频一区二区| 午夜福利123| 久久狠狠久久| 伊是香蕉大人久久| 三级av在线免费观看| 激情欧美亚洲| 国产精品黄页免费高清在线观看| 国产又粗又大又爽| 99视频有精品| 亚洲 国产 欧美一区| 天堂av在线电影| 一本久道中文字幕精品亚洲嫩| 欧美日韩国产专区| 亚洲精品无人区| 日韩三级电影视频| 欧美性猛交一区二区三区精品| 亚洲制服在线观看| 美女精品一区最新中文字幕一区二区三区 | 雨宫琴音一区二区在线| 国产精品欧美久久久| 黄色片一区二区| 国产精品蜜臀在线观看| 精品无码国产一区二区三区av| 成人在线爆射| 精品国产污网站| 日本伦理一区二区三区| 国产精品久久国产愉拍| 亚洲在线观看视频网站| 国产在线三区| 亚洲va在线va天堂| 天美一区二区三区| 婷婷国产精品| 欧美大片在线看| 亚洲无码久久久久久久| 久久影视一区二区| 免费看欧美黑人毛片| 99综合99| 精品国一区二区三区| 永久免费未视频| 日韩黄色免费电影| 日本不卡一区| 日韩欧美少妇| 亚洲天堂av图片| 午夜精品一区二| 国产偷国产偷亚洲高清人白洁| 男人日女人bb视频| 中文字幕伦av一区二区邻居| 57pao成人国产永久免费| 欧美一区二区三区激情| 亚洲大片免费看| 国产草草浮力影院| 免费在线亚洲欧美| 日韩精品久久久| 欧美一级免费| 超碰日本道色综合久久综合 | 欧美有码在线观看视频| 国精产品一品二品国精品69xx| 亚洲一区二区精品视频| 精品中文字幕在线播放 | 欧美精品免费在线观看| 亚洲国产精品无码久久| 午夜一区二区三区在线观看| 特级西西人体4444xxxx| 久久久人人人| 午夜老司机精品| 91精品一区| 久久久久久伊人| 日本在线视频1区| 欧美网站大全在线观看| 国语对白在线播放| 成人av电影在线观看| 国产一区二区视频免费在线观看 | 日韩的一区二区| 日本中文字幕第一页| 中文字幕欧美一区| 国产高清成人久久| 免费视频最近日韩| youjizz.com在线观看| 免费av一区| 国产精品爽黄69| 二区三区在线观看| 亚洲美女精品成人在线视频| 一区二区日韩视频| 亚洲18女电影在线观看| 日本高清黄色片| 成人一区在线观看| av污在线观看| 亚洲国产美女| 一区二区三区电影| 国产精品sss在线观看av| 国产精品高精视频免费| av片哪里在线观看| 亚洲色图狂野欧美| 亚洲国产www| 欧美在线短视频| 国产一级一级片| 国产精品人人做人人爽人人添| 国产污在线观看| 久久精品国产99| 熟女性饥渴一区二区三区| 国产精品99视频| 鲁丝一区二区三区免费| 深夜激情久久| 国产91精品网站| av资源在线| 精品国产欧美成人夜夜嗨| 神马久久精品| 欧美成人video| 一级片免费网站| 欧美色播在线播放| 国产在线视频在线观看| 亚洲视频图片小说| 正在播放国产对白害羞| 久久久不卡影院| av网页在线观看| 国产九色精品成人porny| 亚洲激情在线观看视频| 玖玖视频精品| 又粗又黑又大的吊av| 国产一区久久| 可以免费看的黄色网址| 日韩综合一区| 欧洲精品一区色| 日日天天久久| 精品国产一区二区三区免费| 日韩影片在线观看| 91亚洲国产精品| 91精品麻豆| 91精品在线影院| 超碰国产精品一区二页| 国产精品入口福利| 国产精品xxx| 国产噜噜噜噜久久久久久久久| 日韩免费电影| 国产精品国产三级国产aⅴ浪潮| 成人影院大全| 日本午夜人人精品| 免费成人动漫| 国产精品久久久av| 亚洲第一会所| 国产精品视频网站| 亚洲ww精品| 成人精品久久一区二区三区| 日韩一级特黄| 91免费观看| 99a精品视频在线观看| 国产精品三区www17con| 欧美日韩一本| 欧美不卡在线一区二区三区| 欧美猛男同性videos| 日韩电影免费观看在| 日韩精品久久| 三年中文高清在线观看第6集| 99久久婷婷这里只有精品| 五月婷婷综合色| 国产精品99在线观看| wwwjizzjizzcom| 激情久久久久久久| 男人日女人bb视频| 麻豆精品久久精品色综合| aaaaaaaa毛片| av一区二区不卡| 丰满少妇高潮一区二区| 欧美国产一区在线| 欧美黄色免费观看| 亚洲国产cao| 69视频免费在线观看| 欧美日韩国产综合视频在线观看| 一级做a爱片性色毛片| 日韩免费一区二区三区在线播放| 欧美性猛交 xxxx| 亚洲日本成人网| 欧洲美女少妇精品| 久久久噜噜噜久久中文字免| 少妇一区视频| 成人午夜在线观看| 老司机成人在线| 欧美激情一区二区三区在线视频| av中文一区| 色一情一乱一乱一区91| 午夜亚洲福利在线老司机| 亚洲第一中文av| 成人高清av在线| 国产精品久久免费观看| 一区二区三区视频在线观看| 国内自拍视频在线播放| 91精品国产综合久久精品图片 | 成人欧美一区二区三区视频| 亚洲黄页网站| 在线观看视频黄色| 久久午夜视频| 肉丝美足丝袜一区二区三区四| 久久色在线视频| 男人与禽猛交狂配| 在线观看网站黄不卡| 色欲久久久天天天综合网| 日韩一区二区精品视频| 黄色在线网站噜噜噜| 91免费在线视频网站| 国产精品密蕾丝视频下载| 欧美 日韩 国产精品| 日韩激情视频网站| 中文字幕在线播放视频| 亚洲另类一区二区| 少妇一级淫片日本| 亚洲精品黄网在线观看| av在线官网| 国产美女91呻吟求| 日韩精品a在线观看91| 中国一级大黄大黄大色毛片| 玖玖视频精品| 亚洲av无码一区二区三区观看| 亚洲色图一区二区三区| 中文字幕 日韩有码| 日韩成人在线视频网站| 色操视频在线| 国产日韩专区在线| 欧美日一区二区| 欧美精品第三页| 久久色在线观看| 在线观看日韩中文字幕| 亚洲电影免费观看高清| 中文在线观看免费| 91在线观看免费观看| 久久精品国产68国产精品亚洲| 激情婷婷综合网| 久久久久久久网| www成人在线| 亚洲精品国偷自产在线99热| 超免费在线视频| 国产a一区二区| 欧美日本一区| 一区二区在线免费观看视频| 中文字幕中文字幕一区二区| 国产精品午夜一区二区| 国产亚洲成av人片在线观看桃| 这里有精品可以观看| 欧美激情导航| 久久久久久自在自线| a级大片在线观看| 在线观看视频91| jizz视频在线观看| 国产精品稀缺呦系列在线| 成人在线丰满少妇av| 日韩爱爱小视频| 国产精品精品国产色婷婷| 在线免费观看视频网站| 日韩中文在线观看| 91麻豆精品一二三区在线| 亚洲成人动漫在线| 丰满放荡岳乱妇91ww| 日韩av一区二区在线播放| 日韩精品中文字幕久久臀| 成年美女黄网站色大片不卡| 欧美精品七区| 免费一级片91| 懂色av懂色av粉嫩av| 亚洲国产欧美一区二区三区久久| 欧美xxxhd| 少妇精品久久久久久久久久| 久久99国产精品免费| 欧美性猛交xxxxx少妇| 精品第一国产综合精品aⅴ| 色黄视频在线观看| 午夜精品一区二区三区在线观看| 久久66热偷产精品| 国产一级做a爰片在线看免费 | 香蕉视频黄在线观看| 国产成人精品久久亚洲高清不卡| 成人一区二区| 三大队在线观看| 日韩欧美极品在线观看| 黄色av免费在线观看| 成人两性免费视频| 亚洲激情女人| 国产一级久久久久毛片精品| 91麻豆精品国产无毒不卡在线观看| av电影在线地址| 亚洲精品一区二区三区四区五区| 国产91精品一区二区麻豆亚洲| 9i看片成人免费看片|