//$Id$
import java.util.logging.Level;
import java.util.logging.Logger;
public class ThreadSafe {
public static final Logger LOGGER = Logger.getLogger(ThreadSafe.class.getName());
public static int random(int num){
LOGGER.log(Level.INFO,"Entered Num : {0}",num);
try {
Thread.sleep(5);
} catch (InterruptedException e) {
LOGGER.log(Level.INFO,"Interrupted Exception");
}
return num + 2;
}
public static void main(String[] args){
for(int threads=1;threads<100;threads++){
final int number = threads;
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
int val = ThreadSafe.random(number);
System.out.println("Excepted Value = " + (number+2) + " Returned Value = " + val);
}
},"Thread : "+threads);
thread.start();
}
}
}
出力:
30 Jan, 2013 11:41:26 PM com.zoho.learn.test.ThreadSafe random
INFO: Entered Num : 2
30 Jan, 2013 11:41:26 PM com.zoho.learn.test.ThreadSafe random
INFO: Entered Num : 45
30 Jan, 2013 11:41:26 PM com.zoho.learn.test.ThreadSafe random
INFO: Entered Num : 44
30 Jan, 2013 11:41:26 PM com.zoho.learn.test.ThreadSafe random
INFO: Entered Num : 43
30 Jan, 2013 11:41:26 PM com.zoho.learn.test.ThreadSafe random
INFO: Entered Num : 42
30 Jan, 2013 11:41:26 PM com.zoho.learn.test.ThreadSafe random
INFO: Entered Num : 38
Excepted Value = 47 Returned Value = 47
30 Jan, 2013 11:41:26 PM com.zoho.learn.test.ThreadSafe random
INFO: Entered Num : 41
Excepted Value = 44 Returned Value = 44
Excepted Value = 46 Returned Value = 46
同じメソッドに同時にアクセスするマルチスレッドを除いています。静的メソッドに同時にアクセスするとどうなりますか?
競合状態が発生したのはいつですか?
共有状態とは何ですか?
私が間違っている場合は私を訂正してください。