- ベストアンサー
マルチスレッドの確認
いつも参考にさせて頂いています。 現在JavaにてWEBアプリを開発中です。 頻繁に多画面から同じオブジェクトへの参照が発生するため、インスタンス変数をsessionに格納し、syncronizedで同期化を図っていました。しかしシングルスレッド対応になってしまったため、レスポンスが悪化しました。そこでインスタンス変数をローカル変数にしてしまい、syncronizedをはずし、マルチスレッドで動くように対応してみたのですが、マルチスレッドで動いているかどうかっていうのはどう確認したらよいのでしょうか?うまく説明できなくて申し訳ありませんが宜しくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ANo.2 です。 > 時刻も表示ということですが、表示上どういう結果になればマルチスレッドの動作が確認できるでしょうか? 時刻は補助的なものです。なくても構いません。 System.out.println("入口 " + new java.util.Date()); などのようにして時刻も出力するようにしておけば、 入口 10:00:00 入口 10:00:02 出口 10:00:10 入口 10:00:11 出口 10:00:13 出口 10:00:18 みたいな感じ(表示はあくまでも例です)になって、少なくとも 10:00:02~10:00:10 の間は2つのスレッドが同時に動いていたんだな、ということが分かる、それだけのことです。 たとえですが、「メソッド」というひとつの箱があって、そこに複数のおはじき(やコイン等)を入れたり出したりして、その出し入れした際の時刻をノートに記入してみると、入れて、さらに、入れて、とやれば箱に2個入っているわけであり、2つのスレッドが同時に動いていることになります。(ひとつのおはじきがひとつのスレッドです。)
その他の回答 (2)
- unibon
- ベストアンサー率47% (160/340)
> そこでインスタンス変数をローカル変数にしてしまい、syncronizedをはずし、マルチスレッドで動くように対応してみたのですが、マルチスレッドで動いているかどうかっていうのはどう確認したらよいのでしょうか? その synchronized を外したというメソッドの入口と出口に public void foo() { System.out.println("入口"); ... System.out.println("出口"); } のような println を仕込み、表示結果を見ます。 入口 出口 入口 出口 入口 出口 となっていれば、マルチスレッドになっていない可能性が高いです。 入口 入口 出口 入口 出口 出口 などのようになっていれば、マルチスレッドになっています。 (入ったのにまだ出ていない時点で、新たに入ってきたスレッドがあったから。) 文字だけではなく、時刻も表示させるようにしておけば完璧でしょう。
お礼
とても簡単な方法でとてもありがたいです。 時刻も表示ということですが、表示上どういう結果になればマルチスレッドの動作が確認できるでしょうか? どうか教授宜しくお願いします。
- PED02744
- ベストアンサー率40% (157/390)
Thread.activeCount() メソッドの事ですか?
お礼
返事ありがとうございます。 activeCount()をどう使えばマルチスレッド動作を確認できるでしょうか? 検索して調べてみたのですがわかりませんでした…
お礼
なるほど!やっと理解できました。 詳しく教えて頂いてありがとうございます! 早速試してみたいと思います。 また何か機会があれば宜しくお願いします!