任何人都可以指导我如何在java中使用简单的超时?基本上在我的项目中我正在执行一个语句br.readLine(),它正在读取调制解调器的响应.但有时调制解调器没有响应.为此我想添加一个超时.我正在寻找像这样的代码:
try {
    String s= br.readLine();
} catch(TimeoutException e) {
    System.out.println("Time out has occurred");
}
在代码中,变量计时器将指定结束while循环的持续时间,例如60秒.
   while(timer) {
    //run
    //terminate after 60 sec
   }
我记得我们不能杀死当前正在运行的Quartz Job,但是我们可以中断并在必要时进行布尔检查,无论我们是否需要继续进行后续操作.
即使我们实现InterruptableJob并调用scheduler.interrupt来中断Job,当前执行的作业仍将在服务器中运行.
例如:
http://neopatel.blogspot.in/2011/05/quartz-stop-job.html http://forums.terracotta.org/forums/posts/list/3191.page
有人可以纠正我的理解并解释我如何杀死或阻止"当前"执行的工作?
谢谢,凯西尔
我有一个while循环,我希望它在经过一段时间后退出.
例如:
while(condition and 10 sec has not passed){
}
我想在一段固定的时间后中断一个线程.其他人问了同样的问题,最高投票的答案(/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;
    }
}
他们补充道:
sleep()不是必需的.它仅用于SSCCE /演示目的.只是在那里做长期运行的任务而不是睡觉().
但是如果你Thread.sleep(4000);用for (int i = 0; i …
我正在尝试编写一种方法,该方法在特定时间段内收集加速度计传感器值,并返回该时间段内传感器读数的平均值.
它应该是一个同步即阻塞方法,一旦被调用它将阻塞调用线程一段时间然后将返回传感器平均值
我确实检查了下面类似的问题,但似乎没有适合我的案例的正确解决方案:
我也尝试使用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))); …在Java程序中,我需要执行第三个paryt java类的方法.我Class.forName用来获取一个类并获取该类newInstance()的对象:
Class  class  = Class.forName(className);
AClass object = (AClass) class.newInstance(); 
然后我执行并获得所需方法的结果
ResultObject result = object.method();
到现在为止还挺好.但是如果我想限制方法的执行时间(例如,如果方法在给定的秒数后没有停止,我想要终止此执行并忽略结果),则会出现问题.
理想的解决方案是在单独的线程中运行该方法,并在方法未及时完成时停止并销毁此线程.但遗憾的是线程无法停止(它的stop()方法已被弃用)并且我不能依赖第三方方法的正确中断行为.
有没有其他方法来执行一个方法并完全控制它的执行(即能够随时杀死它)?我确信这是可能的 - 例如,Netbeans可以执行我的类(当我运行我的应用程序时)并且如果我按下停止按钮它可以杀死它.但Netbeans(或Eclipse或任何其他IDE)如何设法做到这一点?
任何的想法?谢谢!
我有一些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;
            }
        };
    }
该方法createService可以永远等待而不抛出任何Exception。(我使用Main 类中定义的全局 ( static public)执行任务)。ExecutorService
java ×8
android ×2
concurrency ×2
timeout ×2
interrupt ×1
javafx ×1
javafx-8 ×1
join ×1
time ×1
while-loop ×1