- - PR -
スレッド制御
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-06-08 13:38
いくつあがっているかは解らないけどスレッドの名前だけはわかっている場合、そのスレッドを制御するには、どのようにアクセスすればよいですか?
やりたいことは、あるアクションで特定のスレッドを殺したいだけなのですが。 また、それはThreadGroupを持たないと実現できないものでしょうか。。。 どなたかご教授ください。 よろしくお願いいたします。 | ||||||||
|
投稿日時: 2005-06-08 13:48
Thread#enumerate(Thread[] tarray)でどうですか。
| ||||||||
|
投稿日時: 2005-06-08 14:00
こんな感じのコードを書いたことがあります。
| ||||||||
|
投稿日時: 2005-06-08 14:14
シュンさん、早速のレスありがとうございます。
今教わったやりかたを、試しているところです。 結果なのですが メインスレッドで行ってみたものの、中身がNULLなのです。 使い方が間違っていたようで、配列の数を指定しないといけないようですが。。。 それは不明なのです! こういう場合はどうすればいいでしょうか。。。 メインといってもRMIでキックしたスレッドですが。。。気になるのはサーバ側は別のVMであらかじめキックしています。そこで、待機状態のスレッドを複数立ち上げている状態でして、今行っているセッションのスレッドではないのです。。。 アクセスできないのでしょうか。。。 そんなことないと思うんですが、なんとか方法があると思うのですが。。。 | ||||||||
|
投稿日時: 2005-06-08 14:32
カーにーさん、はじめまして。お付き合いいただいて恐縮です。
カーにーさんに教えていただいたやりかたも早速試しているところです。 スレッド数をおおよそでも設定してしまうというやりかたがあるんですね。。。 stopは推奨されてないとかいうからdestroyを使ってみたんですが、 java.lang.NoSuchMethodError at java.lang.Thread.destroy(Thread.java:779) at fec.sb.maintenance.stopapn.FmjStopApnBean.sub_execute(FmjStopApnBean.java:133) at fec.sb.maintenance.stopapn.FmjStopApnBean.execute(FmjStopApnBean.java:90) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:324) at org.jboss.ejb.StatelessSessionContainer$ContainerInterceptor.invoke(StatelessSessionContainer.java:683) at org.jboss.resource.connectionmanager.CachedConnectionInterceptor.invoke(CachedConnectionInterceptor.java:185) at org.jboss.ejb.plugins.StatelessSessionInstanceInterceptor.invoke(StatelessSessionInstanceInterceptor.java:72) at org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext(AbstractTxInterceptor.java:84) なの出てしまうんです。 コンパイルエラーは特に出てないのに。 これも推奨されないのですかね。。。 stop で試すと。。。いきました! ありがとうございます! ということは、最初のスレッドでもないのに、後からできたスレッドは、システムのスレッドを全部把握できてしまえる。。。と判断してもいいってことですよね。。。 間違ってますでしょうか。 すみません、たびたび。 | ||||||||
|
投稿日時: 2005-06-08 14:44
>ということは、最初のスレッドでもないのに、後からできたスレッドは、システム
>のスレッドを全部把握できてしまえる。。。と判断してもいいってことですよね。。。 Thread#enumerate()のAPIドキュメントを読みましょう。 動作しつづけるようなスレッドを安全に停止する作法がありますので、それに従った方 が良いですよ。確かチュートリアルに記述があると思いますが、簡単なので 例を書いてしまいます。 停止したくなったらMyThread#notfyStop()をコールします。
スレッドが外部I/Oなどでブロックしうる実装で、且つその最中に 強制終了したい場合には、NIOのInterruptibleChannelと Thread#interrupt()を組み合わせると良いでしょう。 [ メッセージ編集済み 編集者: シュン 編集日時 2005-06-08 14:49 ] | ||||||||
|
投稿日時: 2005-06-09 12:45
Thread.destroy()は未実装のはずです。 Thread.destroy()のAPIリファレンスを見ましょう。 ちゃんと理由までかかれていますよ。
| ||||||||
|
投稿日時: 2005-06-09 14:56
かずくんさん、はじめまして。レスありがとうございます。
了解いたしました。そうでしたね。。。すみません。 シュンさん ありがとうございます。 教えていただいたやりかたは、まだ試していませんが、そのうち使う時がくるかもしれません。ただいま別の問題を抱えており、一時中断状態になってしまいました。 もう少し追っていきたい問題がまだあるにはあるのですが、そのときにまたよろしくおねがいします。 |
1