- PR -

ThreadPoolExecutorについて

投稿者投稿内容
わたなべ
大ベテラン
会議室デビュー日: 2007/12/09
投稿数: 123
お住まい・勤務地: 札幌
投稿日時: 2007-12-13 13:16
>ThreadPoolExecutorを生成する側(呼び出し元)のクラスでThreadPool.submit()を呼び出した順番にスレッドが動き出す。動き出した後のスレッドは並行処理(同時処理)される。
>「順序良く実行して行く」と書いたのは「submit()が呼び出された順番にスレッドが割り当てられていくんですよね?」と聞きたかったのです。

NO.
submitで登録した処理は並行処理を行うことは保障されますが、どんな順番で実行されるかは解りません。
解らないですし、処理順序に意味があるならば並行処理しちゃマズイでしょう。
(おおよそ登録順に実行するとは思いますが)

>Object.hashCode()はそのオブジェクトの先頭アドレスを返す
これは誤り。
そもそもサンプルで出力しているのは、実行されるCallableのHashです。
実行しているThreadを知りたいならば、Thread#currentThread() で取得したThredのIDを調べるべきです。

>Callableオブジェクトは削除できるのでしょうか?
削除=GC対象として考えます。
管理はExecutorが行っているので、後処理もやっているはずです。
ただし、使う側でよけいな参照を持っていたら削除されません。
WT
常連さん
会議室デビュー日: 2004/07/22
投稿数: 29
投稿日時: 2007-12-13 16:18
私の勘違いポイントが分かりました。

nagise>Executor#execute()に渡すのがThreadではなくRunnableというところが
nagise>ポイントですね。

はい。
ここは理解できました。
なので

わたなべ>>Object.hashCode()はそのオブジェクトの先頭アドレスを返す
わたなべ>これは誤り。
わたなべ>そもそもサンプルで出力しているのは、実行されるCallableのHashです。
わたなべ>実行しているThreadを知りたいならば、Thread#currentThread() で取得した
わたなべ>ThredのIDを調べるべきです。

これも理解できました。ありがとうございます。


わたなべ>NO.
わたなべ>submitで登録した処理は並行処理を行うことは保障されますが、
わたなべ>どんな順番で実行
わたなべ>されるかは解りません。
わたなべ>解らないですし、処理順序に意味があるならば並行処理しちゃマズイ
わたなべ>でしょう。
わたなべ>(おおよそ登録順に実行するとは思いますが)

はい。
私も上記認識です。
「おおよそ」登録順に実行する。事を言いたかったです。
(表現がまずいですね・・・難しい・・・)


nagise>「Callableオブジェクトは削除」とはどういうことを意図していますか?

Callableへの参照が無くなる事を意味しているつもりです。


わたなべ>>Callableオブジェクトは削除できるのでしょうか?
わたなべ>削除=GC対象として考えます。
わたなべ>管理はExecutorが行っているので、後処理もやっているはずです。
わたなべ>ただし、使う側でよけいな参照を持っていたら削除されません。

上記「管理はExecutorが行っているので、後処理もやっているはずです。」を確認中です。

スキルアップ/キャリアアップ(JOB@IT)