簡體   English   中英

非抽象類的抽象方法線程安全

[英]non abstract methods of abstract class thread safe

我有一個帶有非抽象方法的抽象類。 我想知道這些非抽象方法默認情況下是否是線程安全的嗎?

為了使問題更清楚,這里有一個例子

public abstract Class Animal {
  private List foo;
  non abstract method survive() {
    //bla bla bla
    foo++;
    foo = foo * 2
    foo = nul
    //bla bla bla
  }  
  abstract method eat();
  abstract method sleep();
}

public class Cat extends Animal {
  eat();
  sleep();
}

public class Dog extends Animal {
  eat();
  sleep();
}

//etc etc

如果貓和狗都希望同時生存,那么Java是否會默認照顧它? 還是應該使Animal.survive()方法同步?

就並發訪問而言,抽象類方法沒有任何特殊之處。 如果您以非抽象方法處理靜態資源,則應使其同步以避免任何並發訪問問題。

如果類A擴展了類B,則類B的所有對象都可以使用A中的公共和非抽象方法。顯然,您可以在B中重寫此函數,但是如果您不這樣做,那么就不會有問題使用A中的(公共,非抽象)函數

方法前面的A中的單詞抽象意味着必須在子類中覆蓋它。

好吧,根本沒有問題,因為Dog和Cat是獨立的對象->沒有同步問題...

“編寫線程安全代碼的核心是管理對狀態的訪問,尤其是對共享的可變狀態的訪問。” -Java並發實踐-

foo狀態非常重要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM