多线程实例化一次vs每个线程

时间:2018-11-04 09:20:06

标签: java multithreading

上了课:

public class ThreadImpl implements Runnable {

 public ThreadImpl(Worker worker, AnotherWorker anotherWorker){
     this.worker = worker;
     this.anotherWorker = anotherWorker;
 }


private Worker worker;

private AnotherWorker anotherWorker;

public void run(){
 ...
 worker.doThis();
 ...
 anotherWorker.doThat();
 ...
 }
 }

这些之间有什么区别(哪个是首选,为什么?)

1。

ThreadImpl threadImpl = new ThreadImpl(new Worker(), new AnotherWorker());
for(int i=0; i < 5; i++) {
     new Thread(threadImpl).start();
}

2。

for(int i=0; i < 5; i++) {
    ThreadImpl threadImpl = new ThreadImpl(new Worker(), new AnotherWorker());
    new Thread(threadImpl).start();
}

我的意思是新的一次与每个线程的新?

1 个答案:

答案 0 :(得分:0)

这是两者之间的区别:

在第一个示例中,您仅创建一个ThreadImpl实例,因此也仅创建了一个WorkerAnotherWorker实例。这将在您创建的不同线程之间共享。

在第二个示例中,您将为每个Thread创建一个对象,除非您有理由共享Worker对象,否则这应该是首选方法。