【发布时间】:2014-08-12 16:06:56
【问题描述】:
我编写了一些 Java 代码,它们将调用 C 中断处理程序。
在 Java 线程 A 中,我使用waitFor() 等待中断到来,然后执行重启。
在 Java 线程 B 中,我将循环打印一个计数器值并休眠几毫秒。
我希望当我检测到中断时,然后立即停止线程 B 中的打印,但失败了。事实上,系统会及时检测到中断,但打印可能会持续 10 秒,然后重新启动。 注意:可能会在中断(按下按钮)后 11 秒重新启动,硬件并不快。
下面是我的代码,有什么建议吗?谢谢!
import java.io.IOException;
class ThreadTesterA implements Runnable
{
private int counter;
private String cmds[] = new String[1];
private Process pcs;
@Override
public void run()
{
cmds[0] = "./gpio-interrupt";
try {
pcs = Runtime.getRuntime().exec(cmds);
if(pcs.waitFor() != 0) {
System.out.println("error");
} else {
ThreadTesterB.setClosed(true);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class ThreadTesterB implements Runnable
{
private int i;
private static boolean closed=false;
public static void setClosed(boolean closed)
{
closed = closed;
}
@Override
public void run()
{
// replace it with what you need to do
while (!closed) {
System.out.println("i = " + i);
i++;
try {
Thread.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println();
}
}
public class ThreadTester
{
public static void main(String[] args) throws InterruptedException
{
Thread t1 = new Thread(new ThreadTesterA());
Thread t2 = new Thread(new ThreadTesterB());
t1.start();
t1.setPriority(Thread.MAX_PRIORITY);
//t1.join(); // wait t1 to be finished
t2.start();
//t2.join();
}
}
【问题讨论】:
标签: java multithreading