javaの同期について
package rwlock;
public class App1 extends Thread {
static private final int REFER = 0;
static private final int UPDATE = 1;
static private final int[] conf1 = { REFER, REFER, REFER, UPDATE };
static private final int[] conf2 = { REFER, UPDATE, REFER, REFER };
static private MyObj0 mo = new MyObj0(); // App1 + MyObj0
int id;
private int[] conf;
public App1(int id, int[] conf) { this.id = id; this.conf = conf; }
public void run() {
long tStart = Time.current();
for (int i = 0; i < conf.length; i++) {
switch(conf[i]) {
case REFER:
mo.refer();
break;
case UPDATE:
mo.update();
break;
default:
assert false : "internal error";
}
}
if (id == 1) { Time.printElapsed(tStart); }
}
public static void main(String[] args) {
App1 th1 = new App1(1, conf1);
App1 th2 = new App1(2, conf2);
th1.start();
th2.start();
}
}
public class MyObj0 {
private Object countLock = new Object();
private int count;
private void enter() { synchronized(countLock) { count++; } }
private void leave() { synchronized(countLock) { count--; } }
public MyObj0() { count = 0; }
public void refer() {
enter();
Time.sleep(300);
leave();
}
public void update() {
enter();
synchronized(countLock) {
assert count == 1;
}
Time.sleep(500);
leave();
}
において、updateの実行中は、他のスレッドでもupdateもreferも実行されないが、二つのスレッドで同時にreferは実行されうるという条件を満たすにはどうしたらよいでしょうか?updateにsynchronizedをつけてみましたが、referが同時に実行されてしまいました
No.1ベストアンサー
- 回答日時:
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- Java java final 1 2022/06/10 22:49
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# Windows Formアプリからコンソールを呼び出して文字を出力させたい 8 2023/05/09 10:53
- Java 直し方について教えて頂きたいです。 4 2022/08/13 02:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
大量のデータを読み込んで表示...
-
エンターキーを押すとOKボタン...
-
[C#.net]スレッド化された別フ...
-
C#で、あるクラスのメンバーす...
-
C# DataGridView列カスタマイズ
-
C# 矢印キーの取得
-
C#でのWNetAddConnection3の使...
-
C#,listBoxのItem追加について...
-
SplitContainerについて
-
Junitテストでvoid戻り値メッソ...
-
インターフェースを持つenum定...
-
JSPファイルから、ActionFormの...
-
C#から、C++で作成したdll内の...
-
Javaの課題について質問です。...
-
Thread.sleepのInterruptedExce...
-
プログラミングの問題です。大...
-
Path型をString型へ変換する(Java)
-
javaで質問です。 文字列2023/2...
-
VBAで配列の計算
-
カタカナをローマジに変換する。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
大量のデータを読み込んで表示...
-
C#で、あるクラスのメンバーす...
-
Junitテストでvoid戻り値メッソ...
-
C#でのWNetAddConnection3の使...
-
C# visibleプロパティをfalseに...
-
C#でキーイベントが発生しない...
-
C# 矢印キーの取得
-
unityでのC++エラーの原因がわ...
-
ボタンの複数割り当てについて
-
Thread.sleepのInterruptedExce...
-
C# DataGridView列カスタマイズ
-
swing初心者です
-
C# 親フォームで指定した値を...
-
[C#.net]スレッド化された別フ...
-
文字列の置換
-
プログラミング(Java)じゃん...
-
C# バイナリダンプを構造体に簡...
-
SplitContainerについて
-
GetDIBits関数の使い方について
-
C# MouseHoverを何度も呼ぶには
おすすめ情報