start()真正启动一个新线程:
public static void main(String[] args) throws InterruptedException {
long startTime = System.currentTimeMillis();
System.out.println("主线程开始:" + Thread.currentThread().getName());
Thread thread1 = new Thread(() -> {
System.out.println("线程1开始:" + Thread.currentThread().getName());
try {
addWatermark(Thread.currentThread().getName());
} catch (Exception e) {
throw new RuntimeException(e);
}
System.out.println("线程1结束:" + Thread.currentThread().getName());
}, "pdf-thread-1");
Thread thread2 = new Thread(() -> {
System.out.println("线程2开始:" + Thread.currentThread().getName());
try {
addWatermark(Thread.currentThread().getName());
} catch (Exception e) {
throw new RuntimeException(e);
}
System.out.println("线程2结束:" + Thread.currentThread().getName());
}, "pdf-thread-2");
thread1.start();
thread2.start();
thread1.join();
thread2.join();
long endTime = System.currentTimeMillis();
System.out.println("所有 PDF 水印处理完成:" + Thread.currentThread().getName());
System.out.println("程序总耗时:" + (endTime - startTime) + " 毫秒");
}
join() 的作用是:让当前线程等待另一个线程执行完,也就是main必须等待线程1和线程2都执行完才能继续执行
控制台输出:
主线程开始:main
线程1开始:pdf-thread-1
线程2开始:pdf-thread-2
线程2结束:pdf-thread-2
线程1结束:pdf-thread-1
所有 PDF 水印处理完成:main
程序总耗时:3193 毫秒
run():只是普通方法调用,不会启动新线程
将.start()改成.run()后控制台输出:
主线程开始:main
线程1开始:main
线程1结束:main
线程2开始:main
线程2结束:main
所有 PDF 水印处理完成:main
程序总耗时:7159 毫秒
评论
填写昵称与邮箱即可评论,无需登录。