マルチスレッドトランザクション、結果統合出力
package com.temp;
import java.util.HashMap;
import java.util.Map;
/**
* ,
* */
public class MultiThreads {
private Map<String, String> resultMap = new HashMap<String, String>();
private int processCount = 2;
public static void main(String[] args) {
long begin = System.currentTimeMillis();
MultiThreads mt = new MultiThreads();
new TaskThread(mt).start();
new PlanThread(mt).start();
int count = 0;
while (!mt.isFinished()) {
Thread.yield();
count++;
}
for (String val : mt.resultMap.values()) {
System.out.println(val);
}
System.out.println(System.currentTimeMillis() - begin);
System.out.println(count);
}
public int getProcessCount() {
return processCount;
}
public void put(String key, String value) {
this.resultMap.put(key, value);
this.processCount--;
}
public boolean isFinished() {
return this.processCount <= 0;
}
}
class TaskThread extends Thread {
private MultiThreads result;
public TaskThread(MultiThreads result) {
this.result = result;
}
@Override
public void run() {
try {
sleep(1000);
this.result.put("task", "This is a task.");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
class PlanThread extends Thread {
private MultiThreads result;
public PlanThread(MultiThreads result) {
this.result = result;
}
@Override
public void run() {
try {
sleep(1000);
this.result.put("plan", "This is a plan.");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
この方法は,1つの大きなタスクをいくつかの非コヒーレントないくつかの並列処理にし,効率を向上させるのに適している.