ホームページ制作,SEO対策 電話受付時間:10:00~19:00(年中無休)
Tel:06-6903-6339
弊社は
に27サイト登録されております。
| 目次 |
|---|
|
・スレッドの同期(ブロック) |
synchronized(obj){
//ステートメント
}
{}内ではobjのモニタを獲得していますが、{}を抜けるとモニタを開放します。
public class MySynchronized {
Object obj1;
int i;
MySynchronized(){
obj1 = new Object();
i = 0;
}
public void addI(String name){
synchronized (obj1) {
i = i + 1;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
System.out.println(name + ":" + getI());
}
}
public int getI(){
return i;
}
}
以下は、上記クラスをインスタンス化し、二つのスレッドでaddIを呼んでいます。
public class TEST {
static MySynchronized ms = new MySynchronized();
public static void main(String[] args){
Thread thread1 = new Thread(){
public void run(){
for (int i=0;i<5;i++){
ms.addI("thread-1.add");
}
}
};
Thread thread2 = new Thread(){
public void run(){
for (int i=0;i<5;i++){
ms.addI("thread-2.add");
}
}
};
thread1.start();
thread2.start();
}
}
上記、Javaアプリケーションを実行すると結果は以下のようになります。thread-1.add:1 thread-2.add:2 thread-1.add:3 thread-2.add:4 thread-1.add:5 thread-2.add:6 thread-1.add:7 thread-2.add:8 thread-1.add:9 thread-2.add:10