import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.UUID;
import java.util.concurrent.CountDownLatch;
public class StringSortTest2 {
public static void main(String[] args) throws Exception {
int size = 100 * 10000;
int fen = 2;
List<String> list = new ArrayList<String>();
Long long1 = System.currentTimeMillis();
CountDownLatch doneSignal = new CountDownLatch(fen);
CountDownLatch startSignal = new CountDownLatch(1);//开始执行信号
for (int s = 0; s < fen; s++) {
List<String> data = getList(size/fen);
list.addAll(data);
new Thread(new Worker(data, doneSignal, startSignal)).start();//线程启动了
}
Long long11 = System.currentTimeMillis();
System.out.println("getData:::" + (long11 - long1));
startSignal.countDown(); //开始执行啦
doneSignal.await(); //等待所有的线程执行完毕
Long long12 = System.currentTimeMillis();
System.out.println("sortData:::" + (long12 - long11));
Collections.sort(list);
Long long3 = System.currentTimeMillis();
System.out.println("sortData:::" + (long3 - long11));
}
public static List<String> getList(int length) {
List<String> list = new ArrayList<String>();
for (int i = 0; i < length; i++) {
String id = UUID.randomUUID().toString();
list.add(id);
}
return list;
}
static class Worker implements Runnable {
private final CountDownLatch doneSignal;
private final CountDownLatch startSignal;
private List<String> data;
Worker(List<String> data, CountDownLatch doneSignal,
CountDownLatch startSignal) {
this.startSignal = startSignal;
this.data = data;
this.doneSignal = doneSignal;
}
public void run() {
try {
startSignal.await(); //等待开始执行信号的发布
Collections.sort(data);
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
doneSignal.countDown();
}
}
}