java - 无法重启线程

标签 java multithreading java-me

<分区>

我有以下主题:


public void start() {
        isRunning = true;

        if (mainThread == null) {
            mainThread = new Thread(this);
            mainThread.setPriority(Thread.MAX_PRIORITY);
        }

        if (!mainThread.isAlive()) {
            try {
                mainThread.start();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

有时我想停止它的运行:


public void stop() {
        isRunning = false;
        System.gc();
}

当再次调用 start() 时,会抛出以下异常:

java.lang.IllegalThreadStateException

指向 mainThread.start() 代码行。

启动/停止线程的最佳方式是什么?我怎样才能使这个线程可重用?

谢谢!

最佳答案

一旦一个线程停止,您在 Java 中无法重新启动它,但是您当然可以在 Java 中创建一个新线程来完成您的新工作。

即使您创建一个新线程或重新启动同一个线程,用户体验也不会有所不同(这在 Java 中是做不到的)。

您可以阅读网站以获取 API 规范 http://docs.oracle.com/javase/6/docs/api/java/lang/Thread.html

您可能正在寻找的是中断。中断是对线程的指示,它应该停止正在做的事情并做其他事情。由程序员决定线程如何响应中断,但线程终止是很常见的。

要了解有关中断的更多信息,请阅读 Java 教程指南 http://docs.oracle.com/javase/tutorial/essential/concurrency/interrupt.html

关于java - 无法重启线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16728528/

相关文章:

java - 使用不正确的字符集打开 CSV Java 生成的文件

java - 为什么每次都会重复使用同一个 ListView 项目?

Java程序无限循环,没有任何错误信息

java-me - 如何在 j2me 中使用蓝牙 API 制作多客户端服务器?

android - J2MEPolish 是否有将 J2ME 应用程序转换为 Android 的基准测试?

java - 如何使用另一部手机的短信运行应用程序?

java - dalvik 似乎没有增加堆

java - 我正在尝试编写谷歌地图应用程序代码,但即使在安装谷歌游戏商店服务后,我也收到以下错误:

multithreading - Linux内核线程没有地址空间

java - 使用 GetPrimitiveArrayCritical 和 Get<PrimitiveType>ArrayRegion 之间的权衡是什么?