7
我想知道我們是否需要外部同步來使用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();
}
}
你是說* * native *方法是自動線程安全的嗎?或者它僅僅是在本例中是* native *和線程安全的? – Pacerier 2012-02-19 04:45:29
該調用通常是線程安全的,因爲所有相關的方法都是同步的。特別是對於isAlive調用,因爲它是JVM外部的,它獨立於JVM中的其他線程。它會給你一個線程是否存活的即時答案。請注意,如果您在啓動後檢查isAlive,它可能不會返回true。 – 2012-02-19 04:50:52