即使线程没有共享数据,您是否应该使用runnable?

时间:2014-02-28 11:28:29

标签: java multithreading runnable

我一直致力于编写多线程java程序。在我进步之前,我正在考虑如何最好地编写程序。

我读了runnable和thread之间的区别以及我们应该使用什么和不应该使用什么。不过我有一个问题。即使线程不共享数据,即同一个可运行的类对象,遵循runnable实现进行线程也是好的吗?

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

示例代码:

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 个答案:

答案 0 :(得分:5)

您开始的每个线程都会分配一个调用堆栈,默认大小为1兆字节。您创建的每个MrRunnable分配... 24个字节。保持透视有助于。