我正在尝试每2秒在一个线程中将请求发送到服务器,并检查是否有对我有用的东西将其还给我。...为了获得价值,我必须使用callable。我无法弄清楚如何每2秒运行一次可调用线程并从中获取价值...这是我的可调用实现示例代码...

public String call(){
    boolean done = true;
    String returnData = "";
    while(done){
        try {
            returnData = post.getAvailableChat();
            if(!returnData.equals("")){
                System.out.println("Value return by server is "+returnData);
                return returnData;
            }
            return null;
        } catch (IOException ex) {
            done = false;
            Logger.getLogger(GetChatThread.class.getName()).log(Level.SEVERE, null, ex);
        }


现在这是我的主类代码,我知道我在主类中做错了,因为我的代码在while循环后不会转到下一行。...但是请告诉我该怎么做

Callable<String> callable = new CallableImpl(2);

    ExecutorService executor = new ScheduledThreadPoolExecutor(1);
    System.err.println("before future executor");
    Future<String> future;

    try {
        while(chatLoop_veriable){
            future = executor.submit(callable);
            String serverReply = future.get();
            if( serverReply != null){
                System.out.println("value returned by the server is "+serverReply);
                Thread.sleep(2*1000);
            }//End of if
        }//End of loop
    } catch (Exception e) {

最佳答案

您正确地选择了ScheduledThreadPoolExecutor,但没有利用它提供的方法,特别是在您的情况下:scheduleAtFixedRate而不是Submit。然后,您可以删除睡眠部分,因为执行程序将为您处理调度。

08-17 23:03