我想並行化一些代碼,它使用「常量」類中的靜態字段。在目前的代碼基本是這樣的用Java爲每個線程創建一個實例字段
public class myClass{
public class Constants{
public static int constant;
}
public static void main(String[] args){
for(int i = 0 ; i<10 ; i++){
Constants.constant = i;
System.out.println(Constants.constant/2);
}
}
}
顯然循環內的代碼更加嚴重依賴於恆類,它本身要複雜得多。我想要做的是爲循環的每次迭代創建一個線程,並分別進行所有計算,同時控制線程數量(現在我正在使用一個簡單的信號量)。 現在很明顯在上面的代碼中,Constants類是在線程之間共享的,因此不能被每個線程更新而不更新所有的線程。
所以我的問題是:是否有無論如何使我的常量類能夠有一個實例爲每個線程,所有雖然能夠以靜態方式訪問其字段?
不是。如果他將值存儲在靜態字段中,則每個類加載器仍然只有一個值。 – Affe
是的,你是對的。我沒有注意到這一點。讓我編輯答案... – snoopy
展望ThreadLocal;基本上每次迭代都需要很多資源,它完全消耗了它所在的vcpu,所以我真的只需要每個vcpu(大約)一個線程。因此,一次只能運行很少的線程,並且在每次迭代的運行時和內存使用情況下,開銷將可以忽略不計。 –