java - 在android中重复启动和停止一个线程

标签 java android multithreading

这里我有一个名为 Method1() 的方法,该方法将在奇数时间调用该方法时启动一个线程,并在偶数时间停止该方法。当我通过 Button.onClick 事件调用该方法时,下面的代码 fragment 有效。这是暂停和恢复线程的正确方法吗?我的方法线程安全吗?

Thread sampleThread = null;
..
..
..
private void Method1(){

    if(sampleThread == null){

        sampleThread =   new Thread(){
            @Override
            public void run() {

                while(true) {

                    Log.d(TAG,"Inside Thread");

                }
            }
        };
        sampleThread.start();

    }else {

        sampleThread.interrupt();

    }
}

最佳答案

如果Method1会被频繁调用,我建议你最好设置一个标志,启用它恢复线程,禁用它暂停线程。因为如果你频繁创建和销毁线程,许多 CPU 和内存将被浪费。您可以这样使用:

public class MyThread extends Thread{
        volatile boolean isRunning = true;//make sure use volatile keyword
        @Override
        public void run() {

            while(isRunning) {

                Log.d(TAG,"Inside Thread");

            }
        }
        public void setRunning(boolean running){
            this.isRunning = running;
        }
    };

当你想暂停时,调用thread.setRunning(false),重启它,调用thread.setRunning(true)

如果不是那么频繁,你的解决方案几乎没问题,但我认为你应该添加

sampleThread = null

sampleThread.interrupt(); 之后,否则当你下次暂停它时,它会中断一个非 Activity 线程,可能会抛出异常。

关于java - 在android中重复启动和停止一个线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34632709/

相关文章:

具有递归函数的 C++ 线程

c - 关于用多线程实现 sleep 理发师时的同步

java - 将部分 XML 布局加载到 android 的就绪布局中

android - Play 商店开发者控制台缺少高级模式

java - Warp Persist 替代方案

java - Riak(Java客户端)突然停止创建二级索引

java - 将 ResolveInfo 项从 ArrayList a 复制到 ArrayList b?

JAVA - 多线程服务器 - 接收和发送之间的滞后

java - 编程语言中尾递归的检测

java - 是否有正确的方法来构建 URL?