一直以為同步的時候只要鎖住對象就能順序執行了
public class Test {
final static byte[] b = new byte[
public static void main(String[] args) {
Test t = new Test()
t
Test t
t
}
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
test()
}
})
public void test() {
synchronized (this) {
for (int n =
System
try {
Thread
} catch (InterruptedException e) {
e
}
}
}
}
}
但是這樣是錯誤的!兩個線程還是交替執行!
查閱了很多資料才知道上面這個鎖是不正確的
public class Test {
final static byte[] b = new byte[
public static void main(String[] args) {
Test t = new Test()
t
t
}
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
test()
}
})
public void test() {
synchronized (this) {
for (int n =
System
try {
Thread
} catch (InterruptedException e) {
e
}
}
}
}
}
這樣的確就是順序執行了
但是我還有點不明白的是第一個例子錯誤的原因是其鎖住的對象不是同一個
其實我們用到同步多半是為了讓線程順序執行
這個時候其實可以使用線程的join()!
oin方法大家可以查下api
thread
thread
thread
thread
do something
do something
那麼這段代碼會等待兩個線程執行完畢後再執行 do something
From:http://tw.wingwit.com/Article/program/Java/gj/201311/27467.html