キューの要素を2つのスレッドで処理し、入力と同じ順序でOutputQueueを準備したかったのです。私はまだいくつかの同期ブロックを作成する必要がありますが、私は次の質問に固執しています。スレッドが破棄されると、変数は破棄されますか?
- 空OutputQueueは
- 返された私は、この正しい方法を行っています。
ThreadMailClass.java
public class ThreadMainClass {
public static void main(String[] args) {
int[] inputQueue={2,3,4,5,6};
processJobs(inputQueue);
}
public static void processJobs(int[] inputQueue){
Queue<Integer> queue = new LinkedList<Integer>();
for(int i:inputQueue){
queue.add(i);
}
System.out.println("Input Queue Size:" + queue.size());
HeavyWorkRunnable hr = new HeavyWorkRunnable();
Thread t1 = new Thread(new HeavyWorkRunnable(queue),"t1");
Thread t2 = new Thread(new HeavyWorkRunnable(queue),"t2");
t1.start();
t2.start();
try {
t1.join();
t2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
//This method is returning empty Queue.
Queue<Integer> outputQueue = hr.getOutputQueue();
System.out.println("Printing Output Queue.." + outputQueue.size());
for(Integer i:outputQueue)
System.out.println(i);
System.out.println("Printing Done");
}
HeavyWorkRunnable.javaスレッドが破壊され
public class HeavyWorkRunnable implements Runnable {
private Queue<Integer> outputQueue = new LinkedList<Integer>();
private Queue<Integer> inputQueue;
public HeavyWorkRunnable() {
}
public HeavyWorkRunnable(Queue<Integer> inputQueue) {
this.inputQueue = inputQueue;
}
@Override
public void run() {
System.out.println("Doing heavy processing - START "+Thread.currentThread().getName());
try {
processInputQueue();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("Doing heavy processing - END "+Thread.currentThread().getName());
}
private void processInputQueue() {
while(inputQueue.peek()!=null){
System.out.println(Thread.currentThread().getName() + "-->input size -->"+ inputQueue.size());
outputQueue.add(inputQueue.remove());
System.out.println(Thread.currentThread().getName() + "-output size -->"+ outputQueue.size());
}
}
public Queue<Integer> getOutputQueue() {
return this.outputQueue;
}
}
複数のスレッドで 'LinkedList'をキューとして使用しています。これはスレッドセーフではありません。そのために同期を使用していません。あなたがするまでそれは正しく動作しません。 – EJP