它實際上是重新定義了一個新的 buf[] 來保存數據,這樣在最後返回數據的時候確實沒有修改 原始的value[],而是將替換後的字符串作爲返回值返回了。
class A {
//定義一個 A 對象名字叫 aObj ,值爲 1
private Long aObj = Long.valueOf(1);
//定義一個 B 對象名字叫 bObj,值爲 1
private Long bObj = Long.valueOf(1);
private void a() {
//鎖對象是 aObj
synchronized (aObj) {
System.out.println("正在執行A方法,5秒以後退出");
try {
TimeUnit.SECONDS.sleep(5);
System.out.println("A執行結束......");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
private void b() {
//鎖對象是 bObj
synchronized (bObj) {
System.out.println("正在執行B方法,2秒以後退出");
try {
TimeUnit.SECONDS.sleep(2);
System.out.println("B執行結束......");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) throws InterruptedException {
A a = new A();
//開通兩個線程來執行,因爲aObj 和 bObj 是不同的對象,所以理論上應該是互不干擾的
new Thread(a::a).start();
TimeUnit.SECONDS.sleep(1);
new Thread(a::b).start();
}
}
-
對象的所有屬性都是 final 的,並不能保證不可變性; -
不可變對象也需要正確發佈。
class D {
final C c;
public D(C c) {
this.c = c;
}
private void changeValue(int salary) {
c.setSalary(salary);
}
public static void main(String[] args) {
C c = new C();
c.setSalary(1);
System.out.println("c.getSalary() = " + c.getSalary());
D d = new D(c);
d.changeValue(3);
System.out.println("c.getSalary() = " + c.getSalary());
}
}
最近有很多人問,有沒有讀者交流羣,想知道怎麼加入。
最近我創建了一些羣,大家可以加入。交流羣都是免費的,只需要大家加入之後不要隨便發廣告,多多交流技術就好了。
目前創建了多個交流羣,全國交流羣、北上廣杭深等各地區交流羣、面試交流羣、資源共享羣等。
有興趣入羣的同學,可長按掃描下方二維碼,一定要備註:全國 Or 城市 Or 面試 Or 資源,根據格式備註,可更快被通過且邀請進羣。
往期推薦
居然有人提問“國家何時整治程序員的高薪現象”?
再見了,谷歌
Windows 11 再惹“衆怒”!網友:微軟就是逼我去買新電腦!
本文分享自微信公衆號 - Hollis(hollischuang)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。