2016-10-03 11 views
3

私はJavaのパッケージjava.util.concurrentを研究していました。次の質問が私の心に浮かんできました:Spring Frameworkを使用する場合、マルチスレッドのシナリオについて心配すべきですか?スプリングとスレッドの安全性

たとえば、私はSpring Bootに基づいたAPIを持っています。私の残りのサービスの1つがArrayListを更新します。ただし、ArrayListはスレッドセーフではないため、データが不一致になる可能性があります。しかし、私はSpring Frameworkを使用しています。

質問:現在のArrayListをjavaまたはSpring Frameworkのコンカレントコレクションの1つに変更する必要がありますか?スレッドセーフであり、マルチスレッドシナリオについて心配する必要はありませんか?

答えて

2

あなたのRESTサービスは、スレッドセーフであるように記述する必要があります。これは、変更可能なプライベートデータメンバーを意味しません。その場合、あなたは安全です。

すべてのメソッドがメソッドスコープ変数を使用する場合は、スレッドセーフです。

アプリケーションサーバーは、入ってくるHTTP要求ごとにスレッドを生成することを知っておくべきです。サービスがシングルスレッドであるかのように書くと、うまくいくでしょう。

マルチスレッドのシナリオについては、常に心配する必要があります。

RESTサービスがデータベースとやりとりする必要がある場合は、接続を共有しないでください。要求ごとに接続をチェックアウトし、メソッドのスコープでそれを使用し、プールに戻すプールされたデータソースが必要です。 JDBC接続はスレッドセーフではありませんが、プールされているので、離れてしまいます。

0

Spring MVC(Spring boot RestServices)はServlet APIに基づいています。セレットはマルチスレッドなので、並行処理を行う必要があります。

しかし、どのようにプログラミングしているかによって異なります。変数がクラス変数/クラスメンバーの場合は、並行性を考慮する必要がありますが、変数がメソッドの中で宣言されている場合はスレッドセーフです。

関連する問題