Java 每次我想运行或不想运行线程时,都要创建新的线程实例

Java 每次我想运行或不想运行线程时,都要创建新的线程实例,java,android,multithreading,Java,Android,Multithreading,我有一个实现可运行的类,比如: private class myThread implements Runnable { @overide Public void run(){ //refreshes a page } } 现在让我们假设我有一个按钮,按下时我想运行线程,因此在onClick中我将有: Thread myThread = new Thread(new myThread()); myThread.start(); 现在我的问题是,我应该在每次单击

我有一个实现可运行的类,比如:

private class myThread implements Runnable {
    @overide
    Public void run(){
    //refreshes a page
    }
}
现在让我们假设我有一个按钮,按下时我想运行线程,因此在onClick中我将有:

Thread myThread = new Thread(new myThread());
myThread.start();
现在我的问题是,我应该在每次单击按钮时创建该类的实例,还是应该在应用程序运行时只创建一次,然后单击“我只创建一次”

myThread.start();
如果是这样的话,如果有人决定在线程有时间完成之前重复按刷新按钮,这会导致任何问题吗? 每次创建一个新实例的利弊是什么


我在安卓系统中做这件事,所以我想知道这会如何影响应用程序正在做的任何事情。

这里没有选择。对于
线程的每个实例,只能调用
start()
一次;如果对同一
线程
对象再次调用
start()
,它将抛出
IllegalThreadStateException
。为每次单击创建一个新实例

但是,如果
MyThread
类没有维护任何内部实例数据,则不需要每次都使用
MyThread
的新实例。您可以创建单个
MyThread
对象,并在每次创建新
线程时重用它:

Thread myThread = new Thread(mMyThread);
(其中,
mMyThread
是存储在成员字段中并创建一次的实例)

在我看来,最干净的方法是将
Thread
子类化,而不是实现
Runnable

private class MyThread extends Thread {
    @overide
    Public void run(){
        //refreshes a page
    }
}
然后你可以做:

new MyThread().start();

而且不必担心
MyThread
类是否具有每个
线程
实例都需要私有的实例数据。(它还有一个额外的好处,就是使名称忠实于实际的对象类型。)

嗯,我明白了,但是如果在我再次启动()线程之前检查上一个线程是否已完成,那么不必每次都创建一个新实例会有任何好处吗?@Amroelaswar-您不能再次启动线程。系统不允许你这么做。正如我在编辑中指出的,您可能不需要每次都使用一个新的
MyThread
实例,但每次都需要一个新的
线程
对象。(顺便说一句,我将该类重命名为
MyRunnable
,而不是
MyThread
,因为它不是
Thread
子类。)好的,谢谢你的回答,我知道,但我刚刚习惯了将其称为Thread,这有助于我整理代码;)