###前提・実現したいこと
Windows7Pro(またはCentOS7.3)、Java1.8でマルチスレッドでコードを実行する時
共通処理用としてstaticクラスやstaticメソッド、1つだけのインスタンス(シングルトンに限らない)にアクセスする場合について
※共通処理用であって、共通リソースではない(マルチスレッドを跨いでcounterのような変数共有はしない)
1:共通処理用部分は、メモリとして確保されるのは1つ分のみなのか
2:共通処理用getObjectの場合、マルチスレッドからアクセスしても
問題なくvalueにあわせたAクラスが取得できるのか
3:「1:」が1つ分であった場合で、「2:」が問題ない場合
処理には同じメモリ領域を使うため、マルチスレッドでアクセスしても
処理は順次1つ分ずつしか実行されていないのか。
(この共通処理部分だけは同期化されているのと同じ処理になり、処理速度はシングルスレッド実行時と同義なのか)
###該当のソースコード
java
1public static counter = 0; 2public static ParentA getObject(int value){ 3 ParentA res = null; 4 5 //counter++; 6 7 switch(value){ 8 case 1: 9 res = new A1(); 10 break; 11 12 case 2: 13 res = new A2(); 14 break; 15 16 case 3: 17 res = new A3(); 18 break; 19 } 20 21 return res; 22}
###試したこと
getObjectメソッドを3つのスレッドから実行し、データを取得するようにした際は、問題なく各Aクラスが取得出来ていたが、そういう仕様なのかどうかが、調べても分かりませんでした。
また、実験から理解した内容で
getObject内だけで使われるローカル変数(作成するインスタンス内も、他と共有されていないもの)であれば、同期化の必要なく、実行できていましたが、それも、上記同様、仕様なのかどうなのかを見つける事ができませんでした。
そもそも認識が間違っていることや、WindowsのみやLinuxのみなど、片側だけでも結構ですので、ご教授頂ければ幸いです。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/05/10 15:18
2017/05/10 15:41
2017/05/10 16:05