1

私はこのコードを手に入れました:

Thread thread = new Thread(new Runnable() {
                    @Override
                    public void run() {
                        OctopusWSClient.sendPoolSensorReading(poolSensorReading, OctopusClientStart.currentMacAddress);
                    }
                });
                thread.setName("Thread - WS");
                thread.start();

約30秒ごとに実行されている(イベントが発生したとき)イベントリスナー内にあるため、30秒ごとに新しいスレッドを作成します。これは通常20秒で完了します。ここで、私の質問は...スレッドをこれと呼んでもかまいません。方法?、そうでない場合、方法??? ...そしてまた、私はこのコードでスレッドIDと名前を監視しています:

Set<Thread> threadSet = Thread.getAllStackTraces().keySet();
                for(Thread t : threadSet){
                    System.out.println(" Thread #"+t.getId()+" Name: "+t.getName());
                }

現在のスレッドのIDと名前が出力されます。常に同じ数のスレッドが表示されますが、IDは常に1ずつ増加しています(スレッド-WS)。

これは悪い信号ですか?しばらくするとJVMメモリがいっぱいになりますか?

ありがとう

4

1 に答える 1

4

複数のスレッドを作成するよりも、単一のスレッドに再開を通知する方がよいでしょう。完了するまでに 20 秒かかる場合は、最後にロックして、イベント リスナーからループを再開するコマンドを受け取るまで待機させます。

于 2013-02-06T19:54:06.017 に答える