gpt4 book ai didi

java - 多线程的良好实践

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:55:01 29 4
gpt4 key购买 nike

我有一个应用程序,当“游戏”统计时,它会启动几个不同的线程。我这样启动线程:

Thread thread = new Thread(new Runnable()
{
public void run()
{
//...
}
});

thread.setName("killMeAtEnd");
thread.start();

稍后当游戏结束时,我在游戏中有一个 dispose() 方法,它对所有正在运行的线程进行排序并结束所有名为“killMeAtEnd”的线程。我的问题是,这是好的做法吗?我的目的是让我的应用程序快速且无杂乱地运行,根据我的经验,“挂起”的线程往往会减慢手机速度,直到应用程序终止。有一个更好的方法吗?这还值得操心吗?

编辑:

如果有人感兴趣,这是我的dispose()。此代码在游戏类中。

public void dispose()
{
Thread threads[] = (Thread[])Thread.getAllStackTraces().keySet().toArray();
for(int x=0;x<threads.length;x++)
{
Thread thread = threads[x];
if(thread.getName().equalsIgnoreCase(KILL))
{
try
{
thread.interrupt();
}catch(Exception e){Log.e(Viewer.GAME,Log.getStackTraceString(e));}
thread = null;
}
}
}

public static final String KILL = "endOnDispose";

最佳答案

您的想法是正确的,但还有一些需要改进的地方:

  1. 不必为所有正在运行的线程查询系统,只需在创建线程时将它们添加到列表中即可。然后您可以终止您创建的所有线程或等待它们完成(加入)。
  2. Interrupt 只会中断处于阻塞状态的线程,因此您需要有一个线程定期检查的附加标志(即在每个“工作周期”之后)。
  3. 在您的线程中捕获中断异常并处理它(即优雅地退出)。

关于java - 多线程的良好实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9797464/

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