系列三、创建线程的方式

一、继承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();
        }
    }
}

四、线程池

相关推荐
C++chaofan15 小时前
RPC框架容错机制深度解析
java·开发语言·后端·性能优化·高并发·juc·容错机制
C++chaofan16 小时前
RPC框架负载均衡机制深度解析
java·开发语言·负载均衡·juc·synchronized·
曼彻斯特的海边2 天前
synchronized优化原理
jvm·juc·synchronized
C++chaofan13 天前
JUC 并发编程:不可变对象、享元模式与自定义连接池 学习笔记
java·享元模式·并发编程·连接池·juc·不可变对象
C++chaofan14 天前
JUC 并发编程:对可见性、有序性与 volatile的理解
java·开发语言·spring·java-ee·juc·synchronized·
西门吹雪分身1 个月前
JUC之公平锁与非公平锁
java·并发·juc·
西门吹雪分身1 个月前
JUC之可重入锁
java·juc·死锁·公平锁·非公平锁
长安城没有风2 个月前
Java 高并发核心编程 ----- 线程池原理与实践(上)
java·juc
长安城没有风2 个月前
Java 高并发核心编程 ----- 初识多线程(下)
java·juc
Chan162 个月前
《Java并发编程的艺术》| ConcurrentHashMap 在 JDK 1.7 与 1.8 的底层实现
java·spring boot·java-ee·intellij-idea·juc