Java创建子线程的两种方法

当我们需要在Java程序中创建一个新的线程时,我们有两种主要的方式。

方法一:通过继承Thread类创建线程

  1. 创建一个继承自Thread类的新类。
public class MyThread extends Thread {
    @Override
    public void run() {
        // 新线程执行的代码
    }
}
  1. 在该类中重写run()方法,将需要新线程执行的代码放在其中。
  2. 在主线程中创建该子线程并启动它。
MyThread myThread = new MyThread(); // 创建MyThread的实例

// 启动新线程
myThread.start();

// 等待新线程完成
try {
    myThread.join();
} catch (InterruptedException e) {
    // 异常处理
}

方法二:通过实现Runnable接口创建线程

  1. 实现Runnable接口。
public class MyRunnable implements Runnable {
    // 实现Runnable接口中的run()方法
    @Override
    public void run() {
        // 新线程执行的代码
    }
}
  1. 在该类中实现Runnable接口中的 run() 方法,将需要新线程执行的代码放在其中。
  2. 创建一个Thread对象,并将实现Runnable接口的类的实例传递给该对象的构造函数。
MyRunnable myRunnable = new MyRunnable(); // 创建实现Runnable接口的类的实例

// 通过实现Runnable接口创建新线程
Thread newThread = new Thread(myRunnable);

// 启动新线程
newThread.start();

// 等待新线程完成
try {
    newThread.join();
} catch (InterruptedException e) {
    // 异常处理
}

示例一:基于继承Thread类创建线程

public class MyThread extends Thread {
    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println("Thread " + Thread.currentThread().getId() + ": " + i);
        }
    }
}

public class Main {
    public static void main(String[] args) {
        MyThread thread1 = new MyThread();
        MyThread thread2 = new MyThread();

        thread1.start();
        thread2.start();
    }
}

该程序创建了两个线程,每个线程都输出其线程ID和计数器,最后输出的结果可能如下所示。

Thread 11: 0
Thread 12: 0
Thread 11: 1
Thread 12: 1
Thread 11: 2
Thread 12: 2
Thread 11: 3
Thread 12: 3
Thread 11: 4
Thread 12: 4
Thread 11: 5
Thread 12: 5
Thread 11: 6
Thread 12: 6
Thread 11: 7
Thread 12: 7
Thread 11: 8
Thread 12: 8
Thread 11: 9
Thread 12: 9

示例二:基于实现Runnable接口创建线程

public class MyRunnable implements Runnable {
    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println("Thread " + Thread.currentThread().getId() + ": " + i);
        }
    }
}

public class Main {
    public static void main(String[] args) {
        MyRunnable myRunnable = new MyRunnable();

        Thread thread1 = new Thread(myRunnable);
        Thread thread2 = new Thread(myRunnable);

        thread1.start();
        thread2.start();
    }
}

该程序创建了两个线程,每个线程都输出其线程ID和计数器,最后输出的结果可能如下所示。

Thread 11: 0
Thread 12: 0
Thread 11: 1
Thread 12: 1
Thread 11: 2
Thread 12: 2
Thread 11: 3
Thread 12: 3
Thread 11: 4
Thread 12: 4
Thread 11: 5
Thread 12: 5
Thread 11: 6
Thread 12: 6
Thread 11: 7
Thread 12: 7
Thread 11: 8
Thread 12: 8
Thread 11: 9
Thread 12: 9

以上两种方式创建的子线程字段都会运行其run()方法中的代码,我们可以通过调用thread.join()方法使主线程等待子线程完成后再执行后续的代码。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java创建子线程的两种方法 - Python技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • Spring bean 四种注入方式详解

    Spring bean 四种注入方式详解 在 Spring 框架中,我们可以通过不同的方式来注入 bean,包括构造函数注入、setter 方法注入、接口注入和注解注入。这篇文章将详细介绍这四种注入方式以及它们的优缺点。 构造函数注入 构造函数注入是指使用构造函数来注入依赖关系。在使用这种方式时,我们需要在 bean 的 XML 配置文件中使用 constr…

    Java 2023年5月31日
    00
  • java实现简易超市管理系统 附源码下载

    Java实现简易超市管理系统攻略 实现思路 本超市管理系统的主要功能包括如下: 实现商品的库存管理功能,包括商品的入库、出库和查询等操作。 实现商品的销售管理功能,包括购物车、结算和打印小票等操作。 实现系统的用户管理功能,包括用户登录和登出、用户信息修改等操作。 根据上述需求,我们可以把整个系统分成三大模块:商品管理模块、销售管理模块和用户管理模块。每个模…

    Java 2023年5月18日
    00
  • IDEA 启动 Tomcat 项目输出乱码的解决方法

    下面是关于“IDEA 启动 Tomcat 项目输出乱码的解决方法”的完整攻略: 1. 问题描述 在使用 IDEA 启动 Tomcat 项目时,控制台输出的内容是一些乱码,影响了开发和调试的效率。 2. 解决方法 2.1 修改 Tomcat 服务器配置 在 Tomcat 服务器配置中,添加一些 JVM 参数,来指定字符集和编码方式。 步骤如下: 在 IDEA …

    Java 2023年5月19日
    00
  • Java获取服务器IP及端口的方法实例分析

    Java获取服务器IP及端口的方法实例分析 在Java中获取服务器的IP地址和端口号是很常见的需求。本文将介绍几种Java获取服务器IP及端口的方法实例,通过这些方法可以轻松实现对服务器IP地址和端口的获取。 方法一:使用InetAddress类 我们可以使用Java标准库中的InetAddress类来获取服务器的IP地址和端口号。 import java.…

    Java 2023年6月15日
    00
  • springBoot中的properties配置解析

    在Spring Boot中,可以使用properties文件来配置应用程序的属性。这些属性可以用于配置数据源、日志、缓存、安全等方面。本文将详细讲解Spring Boot中的properties配置解析,包括如何定义属性、如何使用属性、如何覆盖属性等。 定义属性 在Spring Boot中,可以使用application.properties或applica…

    Java 2023年5月15日
    00
  • Spring cloud alibaba之Ribbon负载均衡实现方案

    Spring Cloud Alibaba之Ribbon负载均衡实现方案 什么是负载均衡 在计算机网络中,负载均衡是指将任务或服务请求分摊给多个处理单元,例如计算机、网络、磁盘、存储设备,以达到最大的吞吐量,最小化响应时间,最大化可靠性,以及避免单点故障的目的。 为什么使用负载均衡 当一个系统需要处理大量的请求时,单个服务实例难以承受这样的压力。通过使用负载均…

    Java 2023年5月19日
    00
  • Java 超详细讲解ThreadLocal类的使用

    Java 超详细讲解ThreadLocal类的使用 什么是ThreadLocal? ThreadLocal是Java的一个线程封闭工具类,它允许当前线程存储和获取某个值,并且这个值对其他线程是不可见的。 通常情况下,我们需要共享数据之间遵循建议: 不可变的元素在任何情况下都是线程安全的。 可变的元素在并发情况下,应该遵循不同的访问方式,例如同步访问。 不可变…

    Java 2023年5月19日
    00
  • Java使用JDBC连接数据库的详细步骤

    下面就为你详细讲解一下“Java使用JDBC连接数据库的详细步骤”的完整攻略。 前置要求 在使用JDBC连接数据库前,我们需要有以下前置要求: 下载相应数据库的JDBC驱动程序 数据库的连接信息,比如:数据库名称,用户名和密码等 步骤一:导入JDBC驱动程序 先导入所下载的JDBC驱动程序,可以使用以下代码: try { // 加载MySQL的JDBC驱动 …

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部