これは簡単な質問ですが、それでも私はそれを自分で取得しません。言って、私は次のコードを持っています。 doSomething()
は、スレッドの前に行く理由同期メソッドを呼び出す順
Runnable objectRunnable = new Runnable() {
void run() {
synchronized(object) {
for (int i = 0; i < 5; i++) {
System.out.println("it's runnable");
Thread.sleep(100);
}
}
}
};
void doSomething() {
synchronized(object) {
for (int i = 0; i < 5; i++) {
System.out.println("it's doSomething");
Thread.sleep(100);
}
}
}
synchronized (object) {
new Thread(objectRunnable).start();
}
object.doSomething();
ので、出力は
it's doSomething
it's doSomething
it's doSomething
it's doSomething
it's doSomething
it's runnable
it's runnable
it's runnable
it's runnable
it's runnable
質問のようなものはありますか?さらに、シンクロブロックの後にオブジェクトメソッドを複数回呼び出すと、それらはすべて後で呼び出され、プログラムはスレッドの内容に戻ります。私は同期スレッド内のスレッドを呼び出すスレッドを、たとえば、何かアナログオブジェクトメソッドを呼び出すと置き換えると、すべてがOKであり、指定された順番になります。
同期オブジェクトのメソッド自体は、このオブジェクトで同期されたスレッドの前にある種の優先順位を持っていますか?
このコードは、残念ながらコンパイルされません。 – tkausl