我有一个实现runnable的类:
private class myThread implements Runnable {
@overide
Public void run(){
//refreshes a page
}
}
现在假设我有一个按钮,我想在按下时运行该线程,所以在onClick中我会:
Thread myThread = new Thread(new myThread());
myThread.start();
现在我的问题是我应该在每次单击按钮时创建该类的实例,还是应该只在应用程序运行时执行一次onClick我只做
myThread.start();
如果有人决定在线程有时间完成之前重复按刷新按钮,那么是否会导致任何问题? 每次创建新实例的优缺点是什么?
我在Android中这样做,所以我想知道这会如何影响应用程序正在做的事情。
答案 0 :(得分:2)
这里别无选择。您只能为start()
的每个实例调用一次Thread
;如果您第二次为同一个IllegalThreadStateException
对象调用start()
,它将抛出Thread
。为每次点击创建一个新实例。
但是,如果MyThread
课程没有维护任何内部实例数据,那么您每次都不需要MyThread
的新实例。您可以创建一个MyThread
对象,并在每次创建新Thread
时重复使用它:
Thread myThread = new Thread(mMyThread);
(其中mMyThread
是存储在成员字段中并创建一次的实例。)
在我看来,最干净的方法是继承Thread
而不是实施Runnable
:
private class MyThread extends Thread {
@overide
Public void run(){
//refreshes a page
}
}
然后你可以这样做:
new MyThread().start();
并且不必担心MyThread
类是否具有需要对每个Thread
实例私有的实例数据。 (这样可以使名称忠实于实际的对象类型。)