Java/スレッドプログラミング
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
#topicpath
----
なんとなく、後回しにしてきたマルチスレッドプログラミング...
まだ全然わかってないんですが、いろいろメモ。
#contents
*** InterruptedException が発生するタイミング [#aafb9810]
途中。
// Object#wait()
// Thread#sleep()
// Thread#join()
//に対してThread#interrupt()が呼ばれたとき。
*** synchronizedにすることで、どこが同期化されるのか。 [#...
下のクラスはsynchronizedのメソッドとそうでないメソッドが...
public class Data {
public synchronized void syncExecute() {
System.out.println("syncExecute実行中......");
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
}
System.out.println("syncExecute実行終了");
}
public void execute() {
System.out.println("execute実行");
}
}
それぞれのメソッドを呼び出すスレッドがあるとします。
class SyncThread extends Thread {
private Data data;
public SyncThread(Data data) {
this.data = data;
}
public void run() {
data.syncExecute();
}
}
class TestThread extends Thread {
private Data data;
public TestThread(Data data) {
this.data = data;
}
public void run() {
data.execute();
}
}
このスレッドを同時に実行すると、
public class ThreadTest{
public static void main(String[] args) {
System.out.println("Start.");
Data data = new Data();
new SyncThread(data).start();
new TestThread(data).start();
System.out.println("End.");
}
}
結果は
Start.
End.
syncExecute実行中......
execute実行 <- syncExecute実行中にも実行されている
syncExecute実行終了
ってなって、''synchronized なメソッドを実行中にもその他の...
んでは、先ほどのメソッドを
public void execute() {
-> public synchronized void execute() {
に変更すると、
Start.
End.
syncExecute実行中......
syncExecute実行終了
execute実行
となり、同時には実行されていないことがわかります。つまり...
まとめると、
synchronizedメソッドはモニタをとらないと実行できない。
ってことですね((すなわちあるインスタンスに対して、実行さ...
*** Thread#sleep()とObject#wait() [#t556a3d5]
上の結論より、
Thread#sleep() したときにモニタは解放しない
Object#wait() したときにモニタは解放される
となります。
そもそもThread#sleep()はモニタを取らなくても実行可能なの...
-[[Object#wait()のJavaDoc:http://java.sun.com/j2se/1.3/ja...
-[[Thread#sleep()のJavaDoc:http://java.sun.com/j2se/1.3/j...
----
この記事は
#vote(おもしろかった[12],そうでもない[1])
- 「ひとつのインスタンスに対して実行されているsynchronize...
#comment
#topicpath
SIZE(10){現在のアクセス:&counter;}
終了行:
#topicpath
----
なんとなく、後回しにしてきたマルチスレッドプログラミング...
まだ全然わかってないんですが、いろいろメモ。
#contents
*** InterruptedException が発生するタイミング [#aafb9810]
途中。
// Object#wait()
// Thread#sleep()
// Thread#join()
//に対してThread#interrupt()が呼ばれたとき。
*** synchronizedにすることで、どこが同期化されるのか。 [#...
下のクラスはsynchronizedのメソッドとそうでないメソッドが...
public class Data {
public synchronized void syncExecute() {
System.out.println("syncExecute実行中......");
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
}
System.out.println("syncExecute実行終了");
}
public void execute() {
System.out.println("execute実行");
}
}
それぞれのメソッドを呼び出すスレッドがあるとします。
class SyncThread extends Thread {
private Data data;
public SyncThread(Data data) {
this.data = data;
}
public void run() {
data.syncExecute();
}
}
class TestThread extends Thread {
private Data data;
public TestThread(Data data) {
this.data = data;
}
public void run() {
data.execute();
}
}
このスレッドを同時に実行すると、
public class ThreadTest{
public static void main(String[] args) {
System.out.println("Start.");
Data data = new Data();
new SyncThread(data).start();
new TestThread(data).start();
System.out.println("End.");
}
}
結果は
Start.
End.
syncExecute実行中......
execute実行 <- syncExecute実行中にも実行されている
syncExecute実行終了
ってなって、''synchronized なメソッドを実行中にもその他の...
んでは、先ほどのメソッドを
public void execute() {
-> public synchronized void execute() {
に変更すると、
Start.
End.
syncExecute実行中......
syncExecute実行終了
execute実行
となり、同時には実行されていないことがわかります。つまり...
まとめると、
synchronizedメソッドはモニタをとらないと実行できない。
ってことですね((すなわちあるインスタンスに対して、実行さ...
*** Thread#sleep()とObject#wait() [#t556a3d5]
上の結論より、
Thread#sleep() したときにモニタは解放しない
Object#wait() したときにモニタは解放される
となります。
そもそもThread#sleep()はモニタを取らなくても実行可能なの...
-[[Object#wait()のJavaDoc:http://java.sun.com/j2se/1.3/ja...
-[[Thread#sleep()のJavaDoc:http://java.sun.com/j2se/1.3/j...
----
この記事は
#vote(おもしろかった[12],そうでもない[1])
- 「ひとつのインスタンスに対して実行されているsynchronize...
#comment
#topicpath
SIZE(10){現在のアクセス:&counter;}
ページ名: