@sekikatsu
Revisions
Report this question
Subscribe question
Help us understand the problem. What is going on with this question?
Q&A
Closed

ScalaのFutureでコールバックをFuture到達前のスレッドで実行する方法

funcX() //ThreadLocalに何か詰め込む
val future = Future { funcY() }
future.onComplete {
  case Success() => funcZ(true) //ThreadLocalから何か取得する
  case Failure(e) => funcZ(false) //ThreadLocalから何か取得する
}

上記のようなコードで、funcXfuncZを同一スレッドで実行する方法はありますでしょうか。

スレッドが一つしかないようなExecutionContextを指定すれば可能そうですが、その場合はfuncX/funcZが重い処理の場合にボトルネックになってしまうため、あくまでExecutionContextには複数スレッドが存在する状態で、funcX実行時のスレッドに処理を戻したいのです。

(ThreadLocalなんて使うな、という意見もあるかと思いますが、外部のJavaライブラリのため変更できず。。。)

0
1
Answer

タスクを同期処理するExecutionContextを複数使うのはいかがでしょうか。
以下がヒントになると幸いです。

0
1スレッドしかないスレッドプールを複数束ねる、という感じでしょうか。
仰る通り、それで実現できそうな気はします。
ただ、可能な限りあまり自前で複雑な処理は実装したくない気持ちもあります。。。(せっかくスレッドプールの仕組みがあるわけなので)

他に方法がなさそうであれば、最終手段として検討してみようと思います。
ありがとうございました!
Help us understand the problem. What is going on with this answer?
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした