跳到正文
hello world

Java中的线程基础

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 毫秒

耗时翻了一倍

评论

填写昵称与邮箱即可评论,无需登录。

推荐阅读