当前位置: 首页 > 知识库问答 >
问题:

线stop()已弃用。但是如何使用TimerTask呢?

萧卜霸
2023-03-14

我已经开始了一个切换按钮按下线程。现在我想在再次按下切换按钮时停止该线程。但是线程。stop()API已被弃用。所以,我得到了不支持的操作异常。我不知道如何使用TimerTask来替代它。以下是我的示例代码:

//AudioDispatcher implements a Runnable
public class AudioDispatcher implements Runnable

//This is a code to start a thread
AudioDispatcher dispatcher = AudioDispatcherFactory.fromDefaultMicrophone(22050,1024,0);
Thread t1 = new Thread(dispatcher,"Audio Dispatcher");
t1.start();

共有3个答案

岳京
2023-03-14

您可以尝试这个时间任务示例;

private static final int DEFAULT_DELAY_TIME = 1000;
private static final int DEFAULT_PERIOD = 1000;
private Timer mPlayTimer;
private TimeTask mPlayPlanTask;

private void startTask() {
        configTimer();
        mPlayTimer.schedule(mPlayPlanTask, DEFAULT_DELAY_TIME,
              DEFAULT_PERIOD);
    }
}

private void stopTimer() {
    if (mPlayTimer != null) {
        mPlayTimer.cancel();
        mPlayTimer = null;
    }
    if (null != mPlayPlanTask) {
        mPlayPlanTask.cancel();
        mPlayPlanTask = null;
    }
}

private void configTimer() {
    if (null == mPlayTimer) {
        mPlayTimer = new Timer();
    }
    if (null == mPlayPlanTask) {
        mPlayPlanTask = new TimerTask() {
            @Override
            public void run() {
                  // Do some work;
            }
        };
    }
}
上官凯歌
2023-03-14

创建标志并根据标志停止

 class Server implements Runnable{
      private volatile boolean exit = false;

      public void run() {

     while(!exit){ 
        System.out.println("Server is running....."); 
    } 

    System.out.println("Server is stopped...."); 
    } 

    public void stop(){ exit = true; } 
}

现在开始和停止

  Server myServer = new Server(); 
    Thread t1 = new Thread(myServer, "T1"); 
    t1.start(); 
//Now, let's stop our Server thread 
System.out.println(currentThread().getName() + " is stopping Server thread"); myServer.stop();
晋俊贤
2023-03-14

不能在执行过程中简单地停止线程。如果要在执行过程中停止线程,可以调用thread。中断()方法

public class SomeBackgroundProcess implements Runnable {

Thread backgroundThread;

public void start() {
   if( backgroundThread == null ) {
      backgroundThread = new Thread( this );
      backgroundThread.start();
   }
}

public void stop() {
   if( backgroundThread != null ) {
      backgroundThread.interrupt();
   }
}

public void run() {
    try {
       Log.i("Thread starting.");
       while( !backgroundThread.interrupted() ) {
          doSomething();
       }
       Log.i("Thread stopping.");
    } catch( InterruptedException ex ) {
       // important you respond to the InterruptedException and stop processing 
       // when its thrown!  Notice this is outside the while loop.
       Log.i("Thread shutting down as it was requested to stop.");
    } finally {
       backgroundThread = null;
    }
}
 类似资料:
  • 问题内容: 问题答案: 调用stop的替代方法是使用中断向线程发出信号,告知你希望它完成其工作。(这假设你要停止的线程行为良好,如果它在抛出异常后立即通过吃掉它们而忽略了InterruptedException,并且不检查中断状态,那么你将返回使用stop()。) 下面是一些代码,我写的一个答案,一个线程的问题在这里,它的线程中断,将如何工作的例子: 要注意的一些事情: 中断原因并立即抛出,否则你

  • 问题内容: 我在对此答案的评论中阅读了有关过时的计划(抱歉,没有参考)的其他许多问题。我真的希望不要,因为我将它用作Java中调度事情的简便方法(而且效果很好)。但是,如果过时了,我会去别处。 但是,快速浏览 1.6版 的API文档并没有说明它已被弃用。Sun的“ 不推荐使用的清单”中甚至都没有提到它。 是否正式弃用 *,如果是,我应该使用什么代替? 另一方面, 如果不弃用它,* 人们是否可以停止

  • 问题内容: 您已经意识到了一个古老的问题:包含浮动元素的容器不会自动扩展其高度以围封其子级。 解决此问题的一种方法是“clearfix”,它添加了许多CSS规则以确保容器正确延伸。 但是,仅提供容器似乎同样有效,并且具有相同的浏览器兼容性。 这是否意味着不建议使用“ clearfix”?使用它还有什么优势吗? 这里有一个非常相似的问题:clearfixhack和overflow:hidden与ov

  • 问题内容: 如您所愿,您可以在Java 8中使用lambda,例如,以替换匿名方法。 可以在此处看到Java 7与Java 8的示例: 可以用Java 8中的以下两种方式表示: 要么 这是因为它是一个功能接口,仅具有一个(抽象的)公共非默认方法。 但是…因为我们有以下几点: 看起来很熟悉吧? 但是,使用lambda表达式不起作用,因为它是一个抽象类,即使它只有一个抽象的公共非默认方法,它也不是接口

  • 如您所知,您可以在Java 8中使用lambdas来代替匿名方法。 这里可以看到Java 7与Java 8的对比示例: 在Java 8中可以用以下两种方式表示: 或 这是因为Runnable是一个函数接口,只有一个(抽象的)公共非默认方法。 但是...对于,我们有以下内容: 看起来很眼熟吧 但是,使用lambda表达式不起作用,因为TimerTask是一个抽象类,即使它只有一个抽象公共非默认方法,

  • 问题内容: 今天,我决定将我的android应用程序从Java转换为Kotlin!:)但是,当我输入以下内容时,我感到非常惊讶: 然后Android Studio告诉我:“’getActionView(MenuItem!):View!’ 已弃用。Java中已弃用“ 因此,在问您解决方案之前,我先问谷歌解决方案是什么,我相信我找到了解决方案:“直接使用getActionView()”。 所以我像这样