线程创建的三大方式

简介: 线程创建的三大方式

继承Thread类 重写run方法

  1. Thread类也是Runnable接口的实现类
/**
 * @author 舒一笑
 * @date 2023/5/24
 */
public class test1 {
    public static void main(String[] args) {
        Thread01 thread01 = new Thread01();
        thread01.start();
        for (int i = 0; i < 100; i++) {
            System.out.println("mian" + i);
        }
    }
}
class Thread01 extends Thread{
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.println("Thread01" + i);
        }
    }
}

实现Runnable接口 重写run方法

/**
 * @author 舒一笑
 * @date 2023/5/24
 */
public class test1 {
    public static void main(String[] args) {
//        Thread01 thread01 = new Thread01();
//        thread01.start();
        Thread02 thread02 = new Thread02();
        Thread t2 = new Thread(thread02);
        t2.start();

        for (int i = 0; i < 100; i++) {
            System.out.println("mian" + i);
        }
    }
}
class Thread01 extends Thread{
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.println("Thread01" + i);
        }
    }
}
class Thread02 implements Runnable{

    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.println("Thread02" + i);
        }
    }
}

匿名内部类方式:

/**
 * @author 舒一笑
 * @date 2023/5/24
 */
public class test1 {
    public static void main(String[] args) {
//        Thread01 thread01 = new Thread01();
//        thread01.start();
//        Thread02 thread02 = new Thread02();
//        Thread t2 = new Thread(thread02);
//        t2.start();
//
//        for (int i = 0; i < 100; i++) {
//            System.out.println("mian" + i);
//        }
        Thread t3 = new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i = 0; i < 10; i++) {
                    System.out.println("Thread03" + i);
                }
            }
        });
        t3.start();
    }
}
/**

lambda表达式的方式创建

/**
 * @author 舒一笑
 * @date 2023/5/24
 */
public class test1 {
    public static void main(String[] args) {
//        Thread01 thread01 = new Thread01();
//        thread01.start();
//        Thread02 thread02 = new Thread02();
//        Thread t2 = new Thread(thread02);
//        t2.start();
//
//        for (int i = 0; i < 100; i++) {
//            System.out.println("mian" + i);
//        }
//        Thread t3 = new Thread(new Runnable() {
//            @Override
//            public void run() {
//                for (int i = 0; i < 10; i++) {
//                    System.out.println("Thread03" + i);
//                }
//            }
//        });
        Thread t4 = new Thread(() -> {
            for (int i = 0; i < 100; i++) {
                System.out.println("lambda:" + i);
            }
        });
        t4.start();
    }
}

总结

启动线程是调用start方法,这样会创建一个新的线程,并执行线程的任务。

如果直接调用run方法,这样会让当前线程执行run方法中的业务逻辑。

目录
相关文章
|
Oracle Java 编译器
Java 中如何生成字节码?
Java 中如何生成字节码?
|
11月前
|
缓存 算法 调度
数据结构之 - 双端队列数据结构详解: 从基础到实现
数据结构之 - 双端队列数据结构详解: 从基础到实现
573 5
|
10月前
|
安全 Java
在 Java 中使用实现 Runnable 接口的方式创建线程
【10月更文挑战第22天】通过以上内容的介绍,相信你已经对在 Java 中如何使用实现 Runnable 接口的方式创建线程有了更深入的了解。在实际应用中,需要根据具体的需求和场景,合理选择线程创建方式,并注意线程安全、同步、通信等相关问题,以确保程序的正确性和稳定性。
401 11
|
11月前
|
XML JSON API
深入理解RESTful API设计:最佳实践与实现
【10月更文挑战第9天】深入理解RESTful API设计:最佳实践与实现
545 1
|
缓存 Java 开发工具
Spring是如何解决循环依赖的?从底层源码入手,详细解读Spring框架的三级缓存
三级缓存是Spring框架里,一个经典的技术点,它很好地解决了循环依赖的问题,也是很多面试中会被问到的问题,本文从源码入手,详细剖析Spring三级缓存的来龙去脉。
838 24
Spring是如何解决循环依赖的?从底层源码入手,详细解读Spring框架的三级缓存
|
安全 Java
一文教你,synchronized和Lock的区别?
最近有多位粉丝被问到synchronized和Lock,据说还是阿里一面的面试题。在分布式开发中,锁是控制线程的重要方式。Java提供了两种锁机制synchronized 和 Lock。接下来,我给大家分享一下我对synchronized和Lock的理解。
397 0
|
缓存 NoSQL Java
SpringBoot的三种缓存技术(Spring Cache、Layering Cache 框架、Alibaba JetCache 框架)
Spring Cache 是 Spring 提供的简易缓存方案,支持本地与 Redis 缓存。通过添加 `spring-boot-starter-data-redis` 和 `spring-boot-starter-cache` 依赖,并使用 `@EnableCaching` 开启缓存功能。JetCache 由阿里开源,功能更丰富,支持多级缓存和异步 API,通过引入 `jetcache-starter-redis` 依赖并配置 YAML 文件启用。Layering Cache 则提供分层缓存机制,需引入 `layering-cache-starter` 依赖并使用特定注解实现缓存逻辑。
2538 1
SpringBoot的三种缓存技术(Spring Cache、Layering Cache 框架、Alibaba JetCache 框架)
|
消息中间件 canal 缓存
Redis与MySQL双写一致性如何保证:延迟双删?binlog异步删除?
Redis与MySQL双写一致性如何保证:延迟双删?binlog异步删除?
|
NoSQL Redis
RedisTemplate.opsForValue()用法简介并举例
RedisTemplate.opsForValue()用法简介并举例
1664 1
|
SQL 存储 关系型数据库
COALESCE 函数:SQL中的空值处理利器
【8月更文挑战第31天】
5975 0