我一直在写一个多线程的Java程序。在我进步之前,我一直在思考如何才能最好地编写程序。

我阅读了runnable和thread之间的区别,以及应该使用和不应该使用的内容。但是我有一个问题。即使线程不共享数据(即同一个可运行的类对象),也要遵循可运行的实现对线程进行编码吗?

我最终将创建不同的可运行对象,从而占用内存。
我还有另一个想法是池化可运行对象并更改它们持有的值,并将其分配给线程。因此,只有一组可运行的对象,因此可以更好地利用内存。

样例代码:

public class MrRunnable implements Runnable {
    private String toFireUrl;

    MrRunnable(String url){
    }

    @Override
    public void run() {
        // do some function here
    }
}

public class Main {

    public static void main(String[] args) {
        // We will create 500 threads
        for (int i = 0; i < 500; i++) {
            Runnable task = new MrRunnable("some new url");
            Thread worker = new Thread(task);
            //start the thread
            worker.start();
        }
    }
}

在这里,我正在创建一个可运行对象的新实例,并且我的线程不共享数据。
那么这种方式合理吗?还是创建一个可运行对象池,让我的线程操纵它们的内容并使用它,会更好?

最佳答案

您启动的每个线程都会分配一个调用堆栈,默认大小为1 MB。您创建的每个MrRunnable都会分配... 24个字节。保持观点有帮助。

关于java - 即使线程不共享数据,您也应该使用可运行的吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22093918/

10-12 04:09