Question

I have been working on writing a multi threaded java program. Before I progress I was thinking how best I can write the program.

I read the differences between runnable and thread and what we should use and what we should not. However I have a question. Is it good to follow the runnable implementation to thread even if the threads are not sharing data i.e the same runnable class object?

I would end up creating different runnable objects thus occupying memory. Also another idea I have is to pool runnable objects and change the value they hold and assign it to a thread. Thereby having only a set of runnable objects and thus utilizing memory better.

Sample Code:

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();
        }
    }
} 

Here I am creating a new instance of runnable objects and my threads don't share data. So is this way justified? Or is it better to create a pool of runnable objects and I let my threads manipulate their content and use it?

Était-ce utile?

La solution

Each thread you start allocates a call stack, sized by default at 1 Megabyte. Each MrRunnable you create allocates... 24 bytes. Keeping things in perspective helps.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top