系列三、创建线程的方式

一、继承Thread

java 复制代码
/**
 * @Author : 一叶浮萍归大海
 * @Date: 2023/11/20 9:39
 * @Description: 创建线程的第一种方式:继承Thread
 */
public class CreateThreadDemo1 extends Thread {

    @Override
    public void run() {
        for (int i = 1; i <= 100; i++) {
            System.out.println(Thread.currentThread().getName() + i);
        }
    }

    public static void main(String[] args) {
        System.out.println("CreateThreadDemo1 main =================>");
        CreateThreadDemo1 t1 = new CreateThreadDemo1();
        CreateThreadDemo1 t2 = new CreateThreadDemo1();
        CreateThreadDemo1 t3 = new CreateThreadDemo1();

        t1.setName("aa");
        t2.setName("bbbbbb");
        t3.setName("ccccccccccccccccc");

        t1.start();
        t2.start();
        t3.start();
    }

}

二、实现Runnable

java 复制代码
/**
 * @Author : 一叶浮萍归大海
 * @Date: 2023/11/20 9:39
 * @Description: 创建线程的第二种方式:实现Runnable
 */
public class CreateThreadDemo2 implements Runnable {

    @Override
    public void run() {
        for (int i = 1; i <= 100; i++) {
            System.out.println(Thread.currentThread().getName() + i);
        }
    }

    public static void main(String[] args) {
        System.out.println("CreateThreadDemo2 main =================>");
//        CreateThreadDemo2 thread = new CreateThreadDemo2();
//        Thread t1 = new Thread(thread, "aa");
//        Thread t2 = new Thread(thread, "bbbbbb");
//        Thread t3 = new Thread(thread, "ccccccccccccccccc");
//
//        t1.start();
//        t2.start();
//        t3.start();

        new Thread(() -> {
            for (int i = 1; i <= 100; i++) {
                System.out.println(Thread.currentThread().getName() + i);
            }
        }, "aa").start();

        new Thread(() -> {
            for (int i = 1; i <= 100; i++) {
                System.out.println(Thread.currentThread().getName() + i);
            }
        }, "bbbbbb").start();

        new Thread(() -> {
            for (int i = 1; i <= 100; i++) {
                System.out.println(Thread.currentThread().getName() + i);
            }
        }, "ccccccccccccccccc").start();
    }

}

三、实现Callable

java 复制代码
/**
 * @Author : 一叶浮萍归大海
 * @Date: 2023/11/20 9:39
 * @Description: 创建线程的第二种方式:实现Callable
 */
public class CreateThreadDemo3 implements Callable<Integer> {

    @Override
    public Integer call() throws Exception {
        int sum = 0;
        for (int i = 1; i <= 100; i++) {
            sum += i;
        }
        return sum;
    }

    public static void main(String[] args) {
        CreateThreadDemo3 thread = new CreateThreadDemo3();
        FutureTask<Integer> futureTask = new FutureTask<>(thread);
        new Thread(futureTask, "A").start();
        new Thread(futureTask, "B").start();
        new Thread(futureTask, "C").start();

        try {
            Integer result = futureTask.get();
            System.out.println(result);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

四、线程池

相关推荐
阿维的博客日记20 天前
用volatile修饰数组代表什么意思,Java
java·juc·volatile
是三好1 个月前
并发容器(Collections)
java·多线程·juc
编程、小哥哥1 个月前
互联网大厂Java求职面试实录 —— 严肃面试官遇到搞笑水货程序员
java·面试·mybatis·dubbo·springboot·多线程·juc
yb0os11 个月前
手写一个简单的线程池
java·开发语言·数据库·计算机·线程池·juc
是三好1 个月前
Lock锁
java·juc
abc小陈先生1 个月前
JUC并发编程1
java·juc
左灯右行的爱情2 个月前
深入理解 G1 GC:已记忆集合(RSet)与收集集合(CSet)详解
java·jvm·后端·juc
左灯右行的爱情3 个月前
深入学习ReentrantLock
java·后端·juc
佛祖让我来巡山4 个月前
JUC相关知识点总结
juc
fly spider5 个月前
多线程-线程池的使用
java·面试·线程池·多线程·juc