多线程的良好实践

Joh*_*ohn 7 java multithreading android thread-safety

我有一个应用程序,当一个"游戏"统计,它启动几个不同的线程.我开始这样的线程:

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

thread.setName("killMeAtEnd");
thread.start();
Run Code Online (Sandbox Code Playgroud)

稍后当游戏结束时,我在游戏内部有一个dispose()方法,它对所有正在运行的线程进行排序,并结束所有名为"killMeAtEnd"的线程.我的问题是,这是一个好习惯吗?我的目的是保持我的应用程序快速运行并且杂乱无章,根据我的经验,留下"悬挂"的线程往往会降低手机的速度,直到应用程序终止.有一个更好的方法吗?这甚至值得打扰吗?

编辑:

dispose()如果有人有兴趣,这是我的.此代码在Game类中.

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";
Run Code Online (Sandbox Code Playgroud)

Kir*_*ril 4

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

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