相关疑难解决方法(0)

364
推荐指数
8
解决办法
51万
查看次数

java中的简单超时

任何人都可以指导我如何在java中使用简单的超时?基本上在我的项目中我正在执行一个语句br.readLine(),它正在读取调制解调器的响应.但有时调制解调器没有响应.为此我想添加一个超时.我正在寻找像这样的代码:

try {
    String s= br.readLine();
} catch(TimeoutException e) {
    System.out.println("Time out has occurred");
}
Run Code Online (Sandbox Code Playgroud)

java timeout timeoutexception

34
推荐指数
1
解决办法
9万
查看次数

如何在Java中的一段时间后停止执行?

在代码中,变量计时器将指定结束while循环的持续时间,例如60秒.

   while(timer) {
    //run
    //terminate after 60 sec
   }
Run Code Online (Sandbox Code Playgroud)

java time

23
推荐指数
3
解决办法
9万
查看次数

是否有可能杀死当前正在运行的Quartz Job?

我记得我们不能杀死当前正在运行的Quartz Job,但是我们可以中断并在必要时进行布尔检查,无论我们是否需要继续进行后续操作.

即使我们实现InterruptableJob并调用scheduler.interrupt来中断Job,当前执行的作业仍将在服务器中运行.

例如:

  1. 作业通过Hibernate触发了一个命名的SQL查询,这需要很长时间
  2. 已经对第三方服务器进行了呼叫,其中第三方服务器需要很长时间来响应

http://neopatel.blogspot.in/2011/05/quartz-stop-job.html http://forums.terracotta.org/forums/posts/list/3191.page

有人可以纠正我的理解并解释我如何杀死或阻止"当前"执行的工作?

谢谢,凯西尔

quartz-scheduler

14
推荐指数
2
解决办法
1万
查看次数

如何在一段时间后退出while循环?

我有一个while循环,我希望它在经过一段时间后退出.

例如:

while(condition and 10 sec has not passed){

}
Run Code Online (Sandbox Code Playgroud)

java android while-loop

14
推荐指数
3
解决办法
6万
查看次数

在固定时间后中断线程,它是否必须抛出InterruptedException?

我想在一段固定的时间后中断一个线程.其他人问了同样的问题,最高投票的答案(/sf/answers/159291751/)给出了下面的解决方案,我稍微缩短了.

import java.util.Arrays;
import java.util.concurrent.*;

public class Test {
    public static void main(String[] args) throws Exception {
        ExecutorService executor = Executors.newSingleThreadExecutor();
        executor.invokeAll(Arrays.asList(new Task()), 2, TimeUnit.SECONDS);
        executor.shutdown();
    }
}

class Task implements Callable<String> {
    public String call() throws Exception {
        try {
            System.out.println("Started..");
            Thread.sleep(4000); // Just to demo a long running task of 4 seconds.
            System.out.println("Finished!");
        } catch (InterruptedException e) {
            System.out.println("Terminated!");
        }
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

他们补充道:

sleep()不是必需的.它仅用于SSCCE /演示目的.只是在那里做长期运行的任务而不是睡觉().

但是如果你Thread.sleep(4000);for (int i = 0; i …

java concurrency timeout

5
推荐指数
1
解决办法
2384
查看次数

收集特定时期的Android传感器并计算平均值

我正在尝试编写一种方法,该方法在特定时间段内收集加速度计传感器值,并返回该时间段内传感器读数的平均值.

它应该是一个同步即阻塞方法,一旦被调用它将阻塞调用线程一段时间然后将返回传感器平均值

我确实检查了下面类似的问题,但似乎没有适合我的案例的正确解决方案:

SensorEventListener位于单独的线程中

Android - 如何运行传感器(服务,线程,活动)?

Android传感器和线程

一种等待传感器数据的方法

我也尝试使用Executors类似于 这个问题,但无法按照我的意愿使用它.

下面是我的代码框架,其中该方法sensorAverage是一种阻塞方法,它将计算加速度计传感器在一段时间内的平均值等于timeout参数

Average average = new Average(); // Some class to calculate the mean

double sensorAverage(long timeout){
    Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION);
    sensorManager.registerListener(this, sensor,SensorManager.SENSOR_DELAY_NORMAL);

    // This does not work
    Thread.sleep(timeout);

    sensorManager.unregisterListener(this);

    return average.value();
}

public void onSensorChanged(SensorEvent event) {
    if (event.sensor.getType() == Sensor.TYPE_LINEAR_ACCELERATION) {
        double x2 = Math.pow(event.values[0], 2);
        double y2 = Math.pow(event.values[1], 2);
        double z2 = Math.pow(event.values[2], 2);
        average.add(Math.sqrt((x2 + y2 + z2))); …
Run Code Online (Sandbox Code Playgroud)

java multithreading android android-sensors

5
推荐指数
1
解决办法
2712
查看次数

如何限制第三方Java方法的执行时间

在Java程序中,我需要执行第三个paryt java类的方法.我Class.forName用来获取一个类并获取该类newInstance()的对象:

Class  class  = Class.forName(className);
AClass object = (AClass) class.newInstance(); 
Run Code Online (Sandbox Code Playgroud)

然后我执行并获得所需方法的结果

ResultObject result = object.method();
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.但是如果我想限制方法的执行时间(例如,如果方法在给定的秒数后没有停止,我想要终止此执行并忽略结果),则会出现问题.

理想的解决方案是在单独的线程中运行该方法,并在方法未及时完成时停止并销毁此线程.但遗憾的是线程无法停止(它的stop()方法已被弃用)并且我不能依赖第三方方法的正确中断行为.

有没有其他方法来执行一个方法并完全控制它的执行(即能够随时杀死它)?我确信这是可能的 - 例如,Netbeans可以执行我的类(当我运行我的应用程序时)并且如果我按下停止按钮它可以杀死它.但Netbeans(或Eclipse或任何其他IDE)如何设法做到这一点?

任何的想法?谢谢!

java multithreading

3
推荐指数
1
解决办法
490
查看次数

超时后如何取消任务?

我有一些Task执行可能挂起的 I/O 阻塞操作(从 中获取文件URL

task = new Task<List<WSDLOperation>>() {
            @Override
            protected List<WSDLOperation> call() {
                List<WSDLOperation> services = new ArrayList<>();
                try {
                    services = WSDLService.createService(wsdlURL).getOperations();
                } catch (Exception ex) {
                    LOG.log(Level.WARNING, "Can't reach {0}", wsdlURL);
                }
                return services;
            }
        };

    }
Run Code Online (Sandbox Code Playgroud)

该方法createService可以永远等待而不抛出任何Exception。(我使用Main 类中定义的全局 ( static public)执行任务)。ExecutorService

java concurrency javafx javafx-8

0
推荐指数
1
解决办法
6231
查看次数