假如有这样一个需求,当我们需要解析一个Excel里多个sheet的数据时,可以考虑使用多线程,每个线程解析一个sheet里的数据,等到所有的sheet都解析完之后,程序需要提示解析完成。
Way1
join
import java.time.LocalTime;
public class Main {
public static void main(String[] args) throws InterruptedException {
Thread sheet1 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println(LocalTime.now() + " sheet1 begin");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
}
System.out.println(LocalTime.now() + " sheet1 finish");
}
});
Thread sheet2 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println(LocalTime.now() + " sheet2 begin");
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
}
System.out.println(LocalTime.now() + " sheet2 finish");
}
});
System.out.println(LocalTime.now() + " all parser begin");
sheet1.start();
sheet2.start();
sheet1.join();
sheet2.join();
System.out.print(LocalTime.now() + " all parser finish");
}
}
Way2
CountDownLatch
import java.time.LocalTime;
import java.util.concurrent.CountDownLatch;
public class Main {
public static void main(String[] args) throws InterruptedException {
CountDownLatch latch = new CountDownLatch(2);
Thread sheet1 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println(LocalTime.now() + " sheet1 begin");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
}
System.out.println(LocalTime.now() + " sheet1 finish");
latch.countDown(); ;
}
});
Thread sheet2 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println(LocalTime.now() + " sheet2 begin");
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
}
System.out.println(LocalTime.now() + " sheet2 finish");
latch.countDown(); ;
}
});
System.out.println(LocalTime.now() + " all parser begin");
sheet1.start();
sheet2.start();
latch.await();
System.out.print(LocalTime.now() + " all parser finish");
}
}
python
import time
import threading
def sheet1():
print(time.strftime("%H:%M:%S")+ " sheet1 begin")
time.sleep(5)
print(time.strftime("%H:%M:%S") + " sheet1 end")
def sheet2():
print(time.strftime("%H:%M:%S")+ " sheet2 begin")
time.sleep(10)
print(time.strftime("%H:%M:%S") + " sheet2 end")
if __name__ == '__main__':
print(time.strftime("%H:%M:%S") + " all parser begin")
thread1 = threading.Thread(target=sheet1)
thread2 = threading.Thread(target=sheet2)
thread1.start()
thread2.start()
thread1.join()
thread2.join()
print(time.strftime("%H:%M:%S") + " all parser end")