Java 如何有效地使用InterruptedException

Java 如何有效地使用InterruptedException,java,android,multithreading,exception,Java,Android,Multithreading,Exception,给定的代码正在doInBackground()中工作。while循环始终为true,但我不知道它如何调用catch中的其他方法 有人能给我解释一下这项技术吗?我们如何从中受益。我不知道我们是如何以及何时脱离这个循环的 doInBackground if(isRunning) { while (true) //this loop should run always. { try {

给定的代码正在doInBackground()中工作。while循环始终为true,但我不知道它如何调用catch中的其他方法

有人能给我解释一下这项技术吗?我们如何从中受益。我不知道我们是如何以及何时脱离这个循环的

doInBackground

    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()。只需遍历它们。