靜態內部類 以及它的執行緒安全問題

2021-09-20 09:42:32 字數 2002 閱讀 1972

最近用上了靜態內部類,作為建造者模式.

自然就會有個疑問.靜態內部類,會不會有執行緒安全的問題?因為靜態的,那麼這個靜態內部類是所有的外部類例項共用乙個呢(這樣會有執行緒安全的問題),

還是每個例項有自己對應的靜態內部類例項?(這樣不會有執行緒安全的問題)

根據測試結果,靜態內部成員類,沒有出現執行緒安全的問題.

com.itrus.portal.common.test.duoshuxinggouzhaoqiceshibui

lder

@65eb

1b78c

om.i

trus

.por

tal.

comm

on.t

est.

duos

huxi

nggo

uzha

oqic

eshi

builder@65eb1b78 com.itrus.portal.common.test.duoshuxinggouzhaoqiceshi

builde

r@65

eb1b

78co

m.it

rus.

port

al.c

ommo

n.te

st.d

uosh

uxin

ggou

zhao

qice

shibuilder@3e4a0b0a

因為雖然靜態內部類是靜態的,但是呼叫duoshuxinggouzhaoqiceshi.builder builder = new duoshuxinggouzhaoqiceshi.builder(page, size);

的時候,都會新生成乙個builder物件,只是用了靜態的方式來標識他不屬於某個物件,而是屬於類.

就類似於我們在類a中定義puiblic static string s1;

就類似於我們在類b中定義puiblic static string s2;

s1和s2自然是兩個例項.

package com.itrus.portal.common.test;

public class main catch (interruptedexception e)

test2.start();

}}

測試類

package com.itrus.portal.common.test;

public class duoshuxinggouzhaoqiceshi

public builder fat(int fat)

public duoshuxinggouzhaoqiceshi build() }

private duoshuxinggouzhaoqiceshi(builder builder)

@override

public string tostring()

}

package com.itrus.portal.common.test;

public class threadtest extends thread

public void run() catch (interruptedexception e)

duoshuxinggouzhaoqiceshi duoshuxinggouzhaoqiceshi =builder.fat(fat).build();

system.out.println(duoshuxinggouzhaoqiceshi);

system.out.println("結束threadtest");

};}

package com.itrus.portal.common.test;

public class threadtest2 extends thread

public void run() ;

}

多執行緒中靜態方法的執行緒安全問題

在多執行緒中使用靜態方法是否有執行緒安全問題 類的成員分為兩類,靜態成員 static member 和例項成員 instance member 靜態成員屬於類,例項成員則屬於物件,即類的例項。簡單討論一下在乙個類中使用靜態字段 static field 和靜態方法 static method 是否...

java程序 執行緒 多執行緒以及執行緒安全問題

程序 程序是處在執行的程式 執行緒 程序裡任務的執行路徑 多執行緒 乙個程序裡有多個執行緒可以執行多個任務 執行緒安全問題 先看乙個售票例子 public class main class selltickets extends thread override public void run els...

執行緒安全問題以及解決方法

我們通過 來了解一下,下面是乙個模擬賣票的案例,首先我們先定義乙個票ticked類實現runnable介面 class ticket implements runnable catch interruptedexception e ticked system.out.println 賣了一張票,還剩...