Java 如何有效地使用InterruptedException
给定的代码正在doInBackground()中工作。while循环始终为true,但我不知道它如何调用catch中的其他方法 有人能给我解释一下这项技术吗?我们如何从中受益。我不知道我们是如何以及何时脱离这个循环的 doInBackgroundJava 如何有效地使用InterruptedException,java,android,multithreading,exception,Java,Android,Multithreading,Exception,给定的代码正在doInBackground()中工作。while循环始终为true,但我不知道它如何调用catch中的其他方法 有人能给我解释一下这项技术吗?我们如何从中受益。我不知道我们是如何以及何时脱离这个循环的 doInBackground if(isRunning) { while (true) //this loop should run always. { try {
if(isRunning)
{
while (true) //this loop should run always.
{
try
{
Thread.sleep(1L);
}
catch (InterruptedException ex)
{
Log.e("Testing Interuption", "error=" + ex.getMessage());
// some working here is also running
}
}
}
它能在while之后调用任何语句吗?我的意思是它是否也能脱离while循环
编辑
中断是何时发生的。这意味着另一个AsyncTask正在调用Thread.sleep();它将中断(意味着去抓)。我说得对吗
我正在调用多个AsyncTasks
,以使用位图设置CameraPreview
@TargetApi(11)
public void start()
{
if (Build.VERSION.SDK_INT >= 11)
{
executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, new Void[0]);
return;
}
execute(new Void[0]);
}
while(true)
语句永远不会结束,因为没有任何东西可以跳出循环,所以不,它不能跳出while循环。(取决于中的内容//不过这里的一些工作也在运行。)
如果另一个线程向该线程发送中断,则执行catch
语句中的代码。在catch
下执行代码后,while
循环再次启动
如果要在收到中断异常时中断while循环,请添加中断catch
中的code>语句可以调用任何东西,只要您打破循环,如下所示:
if (isRunning) {
while (true) //this loop should run always.
{
try {
Thread.sleep(1L);
}
catch (InterruptedException ex) {
Log.e("Testing Interuption", "error=" + ex.getMessage());
// some working here is also running
break; // <--
}
}
doStuffAfterWhileLoop();
}
if(正在运行){
while(true)//此循环应始终运行。
{
试一试{
睡眠(1L);
}
捕获(中断异常例外){
Log.e(“测试中断”,“错误=”+ex.getMessage());
//一些在这里工作的人也在跑步
break;//我写了一些代码,这应该可以帮助您理解它是如何工作的
public class Test2 {
boolean doBreakOut = false;
public Test2() {
Runnable runnable = new Runnable() {
@Override
public void run() {
while (true) // this loop is running while
// !(doBreakOut == true && isInterrupted()).
{
try {
Thread.sleep(1L);
} catch (InterruptedException ex) {
// this is executed when interrupt() is called.
if (doBreakOut) {
break;
}
System.out.println(("Testing Interuption -> "
+ "error=" + ex.getMessage()));
}
}
System.out
.println("did leave loop, threat will shut down now.");
}
};
try {
Thread threat = new Thread(runnable);
threat.start();
// Thread.sleep(x) makes the main thread wait for x milliseconds
Thread.sleep(2000);
threat.interrupt();
Thread.sleep(2000);
threat.interrupt();
Thread.sleep(2000);
doBreakOut = true;
threat.interrupt();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new Test2();
}
}
请看我的编辑。这意味着当AsyncTask的另一个实例调用Thread.sleep()时;第一个实例调用interuption.i Right否。唯一的事情是Thread.sleep()
的作用是使一个线程进入睡眠状态。如果在第一个线程睡眠时另一个线程处于睡眠状态,则不会以任何方式影响第一个线程。对于要中断的第一个线程,某些线程需要调用该线程。那么为什么会发生interuptionException。我想知道它何时会发生以及如何控制它。我认为您需要陈述您的原始问题,并尝试解释您实际想要完成的任务。将重点放在InterruptedException
上似乎是错误的前进方向。我想知道什么时候会得到InterruptedException,以及如何处理多个异步任务来完成相同的任务。将CameraPreview YUVbyte设置为bitmap并设置为CameraPreviewew continuosly我想知道什么时候我会得到InterruptedException,以及如何处理多个AsyncTask来完成相同的工作。要将CameraPreview YUVbyte设置为bitmap并设置为CameraPreview continuosly–显然您没有运行我的示例。当您调用interrupt()时,您会得到异常在您希望接收异常的线程上..如果您有多个AsyncTask,则必须对每个AsyncTask调用interrupt()。只需遍历它们。