gpt4 book ai didi

Java 线程 - 需要注意的事项?

转载 作者:行者123 更新时间:2023-12-02 07:38:43 25 4
gpt4 key购买 nike

在我的应用程序中,我有 MainThreadSeperateThread

我的线程工作得几乎完美。唯一的问题是我无法关闭 SeperateThread

public void run()
{
isRunning = true;
while(isRunning)
{
Log.d(TAG, "Running...");
long currentTime = SystemClock.uptimeMillis();
}
}

public void StopThread()
{
isRunning = false;
}

seperateThread.StopThread();

然后在线程中我有一个方法可以关闭 volatile boolean 值isRunning。尽管我在调试器中单步执行,注意到线程将 boolean 值切换为关闭。

  • 什么会导致此类问题?
  • 这是关闭线程的最干净的方法吗?
  • 关闭线程还有其他步骤吗?
  • 他们在 Android 多线程方面有什么挫折吗?

最佳答案

您肯定想为此使用新的并发包内容,并获取 Java Concurrency in Practice 的副本,并了解更多相关信息。线程看似简单。

为什么你的代码不起作用可能与你没有按照你期望的方式将 isRunning 设置为 false 有关。但是,java.util.concurrency 包无论如何都会为您完成此操作。

根据您的情况,您应该查看执行器框架。所以你的代码可能看起来像这样:

    ExecutorService exec = Executors.newFixedThreadPool(1);//A field somewhere
//Start your thread
exec.submit(new Runnable(){
@Override
public void run() {
while (!exec.isShutdown()) {
Log.d(TAG, "Running...");
//Do stuff
}
}
});
//when done
exec.shutdown();
<小时/>

一夜之间思考这个问题,这可能是一个更好的方法:

    ScheduledExecutorService exec = Executors.newScheduledThreadPool(1);
exec.scheduleWithFixedDelay(new Runnable() {
@Override
public void run() {
//Do stuff
}
}, 0, 1, TimeUnit.MILLISECONDS);
//when done
exec.shutdown();

关于Java 线程 - 需要注意的事项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11856643/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com