适用场景:先用线程查询数据库,然后整理数据。
public static void main(String[] args) {
final CountDownLatch latch = new CountDownLatch(2);
new Thread(){public void run() {
System.out.println("子线程"+Thread.currentThread().getName()+"正在执行");
try {
Thread.sleep(3000);//写要执行的逻辑
for (int i = 0; i < 10; i++) { //for循环可替换成查询数据库操作
System.out.println(i);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("子线程"+Thread.currentThread().getName()+"执行完毕");
latch.countDown();
};}.start();
new Thread(){ public void run() {
System.out.println("子线程"+Thread.currentThread().getName()+"正在执行");
try {
Thread.sleep(3000);//写要执行的逻辑
for (int i = 10; i < 20; i++) { //for循环可替换成查询数据库操作
System.out.println(i);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("子线程"+Thread.currentThread().getName()+"执行完毕");
latch.countDown();
};}.start();
System.out.println("等待2个子线程执行完毕...");
try {
latch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("2个子线程已经执行完毕");
System.out.println("继续执行主线程");
for (int i = 20; i <30; i++) { //可替换成处理线程0和线程1的数据
System.out.println(i);
}
}