Java:每个特定时间间隔的事件线程(Thread中的问题观察者:EventSource.run()方法在无限循环中运行)

时间:2015-02-24 18:11:50

标签: java multithreading observable

我正在做一个线程,告诉我事件何时发生。如果事件可以由计时器控制,我认为不需要该线程。但我每分钟都需要一个活动。麻烦是两个: 1.当事件在内部时,线程发生得太快。这似乎是循环线程。但线程是收听或捕捉事件所必需的。 2.我无法告诉方法哪个自定义对象必须调度事件,然后从新类中捕获此事件 我希望你能提供帮助,这里是代码:

import java.util.Observer;
import java.util.Observable;

public class Main {

    public static void main(String[] args) {
        Threading test = new Threading();
        test.start();
    }
}

class ResponseHandler implements Observer {

    @Override
   public void update(Observable obj, Object arg) {
        if (arg instanceof String) {
            String resp = (String) arg;
            System.out.println("\n Received response: " + resp);
        }
    }
}

class EventSource extends Observable implements Runnable {

    @Override
    public void run() {
        try {
            while (true) {
                Object msg = new Object(); //I guess that this must have an object here, that throws a timeout
                setChanged();
                notifyObservers(msg);
            }
        } catch (Exception e) { e.printStackTrace();}
    }
}

class Obj {

    EventSource _eventSource;
    ResponseHandler _responseHandler;

    public Obj() {
        try {
            _eventSource = new EventSource();
            _responseHandler = new ResponseHandler();
            _eventSource.addObserver(_responseHandler);
        } catch (Exception ex) {
            System.out.print(ex);
        }
    }
}

class Threading extends Obj implements Runnable {

    Thread _thread;

    public void run() {
        while (true) {
            try {
                _eventSource.run(); //Event which never stops
                Thread.sleep(1000); //hey thread what are you doing?

            } catch (InterruptedException ex) {
            }
            System.out.println("Thread");
        }
    }
    //Singlethon
    public void start() {
        if (_thread == null) {
            _thread = new Thread(this);
            _thread.start();
        }
    }
}

0 个答案:

没有答案