在旧线程运行时启动新线程

时间:2014-04-18 03:53:08

标签: java multithreading thread-safety

如果我将一个新线程对象分配给一个线程变量并运行它,而之前绑定到该变量的线程对象仍在运行,会发生什么?它会被垃圾收集和销毁吗?或者它们会并行运行吗?

这样的事情:

class ThreadExample implements Runnable {
    public void run() {
        // Something that runs for a long time
    }
}

public class ThreadExampleMain {
    public static void main(String[] args) {
        // Client Code
        ThreadExample e = new ThreadExample();
        Thread t = new Thread(e);
        t.start();

        e = new ThreadExample();
        t = new Thread(e);
        t.start();
    }
}

这会启动并行运行的两个线程还是第一个线程会停止并被垃圾回收?

1 个答案:

答案 0 :(得分:0)

如果您谈论 Java ,那么答案是:它们将并行运行。垃圾收集与线程管理无关。

您可以使用以下示例代码查看:

public class LostThread {
    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            final int value = i;
            new Thread(new Runnable() {
                @Override
                public void run() {
                    while (true) {
                        try {
                            System.out.println(value);
                            Thread.sleep(1000);
                        } catch (InterruptedException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                    }
                }
            }).start();
        }
    }
}

创建十个线程后主要完成,但它们仍在运行。