java.lang.Threadでメソッドを使用するために外部同期が必要なのでしょうか?例えばjava.lang.Thread自体はスレッドセーフなクラスですか?
は、我々はどのスレッドなし外部同期からメソッドt1.isAlive()を呼び出し、それが返すことを期待することができます。
真t1がすでにそうでない場合は、falseを開始されている場合。
java.lang.Threadでメソッドを呼び出すには、外部同期が必要ですか?
public static void main(String args[]) {
final java.lang.Thread t1 = new java.lang.Thread(new java.lang.Runnable() {
@Override
public void run() {
while(true){
//task
}
}
});
java.lang.Thread t2 = new java.lang.Thread(new java.lang.Runnable() {
@Override
public void run() {
while (true) {
System.out.println(t1.isAlive()); // do we need synchronization before calling isAlive() ?
}
}
});
t2.start();
t1.start();
try {
java.lang.Thread.sleep(1000000);
} catch (java.lang.InterruptedException e) {
e.printStackTrace();
}
}
* *ネイティブ*メソッドは自動的にスレッドセーフですか?それとも、この場合は*ネイティブ*とスレッドセーフであることだけですか? – Pacerier
すべての関連するメソッドが同期されるため、呼び出しはスレッドセーフです。特にisAlive呼び出しは、JVMの外部にあるので、JVMの他のスレッドとは独立しています。スレッドが生きているかどうかの瞬間的な答えをあなたに与えます。起動直後にisAliveをチェックすると、trueを返さないことがあります。 –