Tag: 中断

如何在将来取消时在Callable中终止CXF Web服务调用

编辑 这个问题到目前为止已经经历了几次迭代,所以请随意查看修订版本以查看有关历史和所尝试事项的一些背景信息。 我正在使用CompletionService和ExecutorService以及Callable,通过CXF生成的代码同时调用几个不同的Web服务上的许多函数。这些服务都为我用于的一组信息提供不同的信息。我的项目。 但是,服务可能无法长时间响应而不会抛出exception,从而延长了等待组合信息的时间。 为了解决这个问题,我正在同时运行所有服务调用,并且在几分钟之后想要终止任何尚未完成的调用,并且最好记录哪些调用尚未完成,或者通过抛出一个详细的例外。 这里有一些高度简化的代码来说明我已经在做什么: private Callable<List> getXXXFeatures(final WiwsPortType port, final String accessionCode) { return new Callable<List>() { @Override public List call() throws Exception { List features = new ArrayList(); //getXXXFeatures are methods of the WS Proxy //that can take anywhere from second to never to return for (RawFeature raw : port.getXXXFeatures(accessionCode)) { Feature […]

一分钟后立即停止线程

我有一个JButton来调用我的线程。 但我真正想做的是在一分钟之后停止线程! 我的actionListener方法是: private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { new Frame2().setVisible(true); Thread t=new Thread(new Frame2()); t.start(); } 我运行一分钟的线程如下: public void run(){ int i; while(!Thread.currentThread().isInterrupted()){ for(i=0;i<=100;i++){ if(i==100){ Thread.currentThread().interrupt(); } try { Thread.currentThread().sleep(600); } catch (InterruptedException ex) { System.out.print("THREAD CLOSED"); return; } } System.out.print("DOING THINGS BLA BLA"); } } 问题:我成功地在一分钟后停止了线程,但我无法做任何想要的事情。 我只想知道如何才能实现这一点,以便只运行一分钟线程,并在线程中我想做我的事情! 但是怎么样? 我错了这种方法吗? 如果,是的那么什么应该是正确的方法?

在Java中用另一个线程的run方法中断一个线程

我正在阅读这篇文章,并给出了从另一个线程中断一个线程的建议 “”如果正确实施,以下是一些应该有效的方法。 您可以让两个threads定期检查一些常见的标志变量(例如将其命名为stopNow),并安排两个线程在完成时设置它。 (标志变量需要是易失性的……或者是正确同步的。) 您可以让两个threads定期调用Thread.isInterrupted()方法来查看它是否已被中断。 然后每个线程在完成时需要在另一个线程上调用Thread.interrupt()。“” 我不明白第二种方法是如何使用Thread.isInterrupted() 。 也就是说, Thread-1如何在Thread-2上调用Thread.interrupt() 。 考虑这个例子,在main方法中我启动两个threads t1和t2 。 我希望t1在达到某个条件后停止t2 。 我该怎么做到这一点? class Thread1 extends Thread { public void run(){ while (!isDone){ // do something } } //now interrupt Thread-2 } class Thread2 extends Thread { public void run(){ try { while(!Thread.isInterupted()){ //do something; } catch (InterruptedExecption e){ //do something […]

如何停止等待用户输入?

我正在构建一个程序来询问乘法,我想设置一个计时器来强制该人在给定时间内给出答案: 如果此人在计时器结束前回答:请进行下一次乘法 如果计时器到达终点,则停止等待用户输入:转到下一个乘法 目前,案例1可以完成,但不是2 ,我正在考虑return;的方法return; 从一个线程内的方法或其他东西,我不知道如何 所以我遇到了一个问题,如果Scanner打开,等待输入,如何阻止? 我已经尝试将它放在一个线程和interrupt()它或使用boolean作为标志,但它不会停止Scanner class Multiplication extends Calcul { Multiplication() { super((nb1, nb2) -> nb1 * nb2); } @Override public String toString() { return getNb1() + “*” + getNb2(); } } abstract class Calcul { private int nb1, nb2; private boolean valid; private boolean inTime = true; private boolean answered = […]

Java硬件中断处理

我想知道在引发硬件中断时是否可以自动调用Java方法。

如何在Java中杀死死锁线程?

我想杀死陷入死锁状态的线程。 首先,我们可以使用java.lang.management ThreadMXBean类的findDeadlockedThreads()方法检测处于死锁状态的线程ID 。 然后,我想通过线程ID杀死线程,因此我有两个相关的问题: (1)如何通过线程id控制线程? (2)如何杀死被阻塞的线程? 我认为invokting interrupt()方法会给线程一个exception并将杀死线程。

如果没有中断,Future.cancel()会怎么做?

来自Future.cancel()上的java文档 boolean cancel(boolean mayInterruptIfRunning) 尝试取消执行此任务。 如果任务已完成,已取消或由于某些其他原因无法取消,则此尝试将失败。 如果成功,并且在调用cancel时此任务尚未启动,则此任务永远不会运行。 如果任务已经启动, 则mayInterruptIfRunning参数确定执行此任务的线程是否应该在尝试停止任务时被中断 。 我的问题是,如果mayInterruptIfRunning为false,取消会怎么做? 如果任务已经运行,它如何取消或停止执行?

如何编写可中断的方法

我有一个方法,从概念上看,它看起来像: Object f(Object o1) { Object o2 = longProcess1(o1); Object o3 = longProcess2(o2); return longProcess3(o3); } 过程本身也可能是复合的: Object longProcess1(Object o1) { Object o2 = longSubProcess1(o1); return longSubProcess2(o2); } 等等,不同的过程可能存在于不同的模块中。 大多数进程都很长,因为它们计算成本高,而不是IO绑定。 到目前为止一切都那么好,但现在我希望f作为一个整体可以打断。 推荐的Java方法是使用Thread.interrupted()定期检查中断的标志。 它非常简单,但如果我需要将我的方法更改为以下内容,它很快就会变得很麻烦: Object f(Object o1) { Object o2 = longProcess1(o1); if (Thread.interrupted()) throw new InterruptedException(); Object o3 = longProcess2(o2); if (Thread.interrupted()) throw new InterruptedException(); […]

在Java中有没有办法记录*每个* Thread中断?

我想以某种方式记录每次调用Thread.interrupt() ,记录哪个Thread发出了调用(及其当前堆栈)以及识别有关哪个Thread被中断的信息。 有没有办法做到这一点? 在搜索信息时,我看到有人提到了实施安全管理器的可能性。 这是可以在运行时完成的事情(例如,在Applet或Web Start客户端中),还是需要使用已安装的JVM来执行此操作? 或者有更好的方法吗?

如何将中断键序列发送到Java进程?

我有一个Java Process实例及其相关流的句柄。 这是一个控制台程序。 我想模拟一个中断序列。 在Windows上,这是Ctrl-C。 这可能没有当地人吗? 这样做的原因是:控制台程序本身就是一个命令行控制台,控制另一种语言的虚拟机。 用户可以从此控制台程序运行另一个程序。 程序运行时,中断序列将中断底层程序的执行并导致控制台程序进入调试模式。 我们用Java包装这个控制台调试器,以便它可以通过IDE(Eclipse)驱动。 发送中断序列将等同于在Eclipse调试器中按“suspend”。