0

皆様、こんにちは。

私は以下に示すように Thread を持っています。これは while true 状態で HashSet 内のデータを継続的にチェックします。存在する場合はそれらを抽出し、何かを実行し、HashSet に 5 分間シンボルがなかった場合に備えて (どうすればよいかという私の質問です)そのような条件をelseブロックの下に保持することは可能です)

package com;

import java.util.HashSet;

public class Tester extends Thread

{

    HashSet<String> set = new HashSet<String>();

    public void run() {

        while (true) {

            try {

                if (set.size() > 0) {

                    // extract those and do something
                    set.clear();
                }

                else {

                    // if there were no elements in set for more than 5 minutes than execute a task
                    // here is my question , to keep such a check is possible or not 


                }

                Thread.sleep(2000);
            } catch (Exception e) {

            }

        }
    }

    public static void main(String args[]) {
        try {
            Tester qT = new Tester();
            qT.start();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}
4

3 に答える 3

1

ループの前にタイムスタンプを初期化できます。次に、set.size() > 0が true の場合、タイムスタンプを現在の時刻に更新します。else では、保存されたタイムスタンプが現在のタイムスタンプより少なくとも 5 分古いかどうかを確認します。

おそらく次のようなものが必要です。

package com;

import java.util.HashSet;
import java.util.Date;

public class Tester extends Thread
{
    HashSet<String> set = new HashSet<String>();

    public void run() {
        Date d = new Date();
        while (true) {
            try {
                if (set.size() > 0) {
                    d = new Date();
                    set.clear();
                }
                else {
                    if(new Date().getTime() - d.getTime() > 300000){
                        d = new Date();
                        //execute your method
                    }
                }

                Thread.sleep(2000);
            } catch (Exception e) {
            }
        }
    }

    public static void main(String args[]) {
        try {
            Tester qT = new Tester();
            qT.start();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}
于 2013-07-25T19:34:38.890 に答える
0

スレッドが run に入ると、 SystemTime を取得します。以下に示すように、else ブロックで現在の時刻も取得します。

import java.util.HashSet;

 public class Tester extends Thread

{

HashSet<String> set = new HashSet<String>();

public void run() {
    long t1 = date.getTime();
    while (true) {

        try {

            if (set.size() > 0) {

                // extract those and do something
                set.clear();
            }

            else {

                // if there were no elements in set for more than 5 minutes than     execute a task
                // here is my question , to keep such a check is possible or not 

 long t1 = date.getTime();
 if(!hashset_data_not_available)
 {
 t1 = date.getTime();
 }
 if((t2-t1)/(60*1000)>5 && if_hashset_data_not_available) {
//do something that u wanna do 
{
            }

            Thread.sleep(2000);
        } catch (Exception e) {
于 2013-07-25T19:42:12.307 に答える
0

まず、タイマーを作成します。

Timer timer = new Timer(300000, new ActionListener() {
    public void actionPerformed(ActionEvent event) {
        <preform the task here>
    }
});
timer.setRepeats(false);

スレッドが開始したら、タイマーを開始します。

timer.start();

セット内にアイテムがある場合:

timer.restart();

else は必要ありません。タイマーがそれを処理します。timer.isRunningセット要素のチェックが 5 分後に停止するように、メイン ループ条件をチェックインする必要があります。

于 2013-07-25T19:37:21.377 に答える