Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android中重新初始化线程对象的成本是多少_Java_Android_Multithreading - Fatal编程技术网

Java Android中重新初始化线程对象的成本是多少

Java Android中重新初始化线程对象的成本是多少,java,android,multithreading,Java,Android,Multithreading,上面的代码只是一个示例。正如我们所知,一旦线程obj。完成它的任务后,我们不能再次启动它,为了重用,我们需要重新初始化线程obj。举例来说 myThread被重新初始化了3次,所以如果我继续增加重新初始化的次数,内存成本会更高吗? 如果是,那么如何处理呢?免责声明:我不知道Android,但是 您的活动多久创建一次新线程?这些线能穿多久?创建线程有些昂贵。如果您不经常创建它们,则不会造成伤害,但是如果您正在创建许多短命线程,那么考虑使用线程池(例如, java .UTI.Orth.TycRePo

上面的代码只是一个示例。正如我们所知,一旦线程obj。完成它的任务后,我们不能再次启动它,为了重用,我们需要重新初始化线程obj。举例来说
myThread
被重新初始化了3次,所以如果我继续增加重新初始化的次数,内存成本会更高吗?
如果是,那么如何处理呢?

免责声明:我不知道Android,但是


您的活动多久创建一次新线程?这些线能穿多久?创建线程有些昂贵。如果您不经常创建它们,则不会造成伤害,但是如果您正在创建许多短命线程,那么考虑使用线程池(例如, java .UTI.Orth.TycRePoLeExtor Outuor >代码>)/P>我正在开发一个涉及热打印的Android应用程序,因此我已经实现了用于打印的单独线程服务。服务是单身。每次服务接收到打印请求时,它都会首先检查线程是否为null或是否未运行(如果为是),然后创建线程的新实例。现在由用户决定他提出的许多打印请求。如果他一整天都不结案就提出打印申请怎么办?GC会清除不必要的线程引用吗?@user1983226,就像我说的,我不知道android。听起来您需要一个长时间运行的线程,所以我关于使用线程池的建议可能不适合您的需要。至于垃圾收集,线程的堆栈将在线程死亡后立即被回收。在线程死了,堆栈也没了之后,
thread
对象就像任何其他对象一样:当程序中没有引用它的变量时,它将被回收。
public class Test extends Activity{

    private MyThread myThread;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        myThread = new MyThread();
        myThread.start();

        // some code

        if(!myThread.isAlive())
        {
            myThread = new MyThread();
            myThread.start();
        }

        // some code

        if(!myThread.isAlive())
        {
            myThread = new MyThread();
            myThread.start();
        }
    }

    private class MyThread extends Thread
    {
        @Override
        public void run() {
            //some code
            super.run();
        }
    }

}