Java多线程基础之创建和运行

2023-10-27

前言

在现代软件开发中,多线程编程已经成为一项重要的技能。通过合理地利用多线程,我们可以实现并发处理、提高程序性能和改善用户体验。本文将介绍Java中多线程编程的基础知识,包括多线程的概念、线程的创建和运行,以及线程的生命周期和状态转换。

一、多线程的概念和优势

多线程是指在一个程序中同时运行多个线程,每个线程都可以独立执行不同的任务。相比于单线程程序,多线程程序具有以下优势:

1、提高程序性能:多线程可以利用多核处理器的优势,实现并发处理,加快程序的执行速度。

2、提高资源利用率:多线程可以充分利用系统资源,使CPU、内存等资源得到更充分的利用。

3、改善用户体验:多线程可以使程序具有更好的响应性,保持界面的流畅性,避免程序因为长时间的任务而被阻塞。

二、线程的创建和运行

在Java中,可以通过继承Thread类或实现Runnable接口来创建线程。

一、继承Thread类:

1、创建一个继承自Thread类的子类。

2、重写run()方法,在其中定义线程要执行的任务。

3、创建线程对象,并调用start()方法启动线程。

代码示例:

public class Text {
    public static void main(String[] args) {
        MyThread myThread = new MyThread();
        myThread.start();
        for (int i = 0; i < 10; i++) {
            System.out.println("main" + i);
        }
    }
}

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

在这个示例中,我们定义了一个继承自Thread类的MyThread类。该类重写了run()方法,在其中定义了线程要执行的任务。在main方法中,我们创建了一个MyThread对象myThread,并调用start()方法启动线程。线程开始执行后,会同时运行run()方法中的代码块,打印出"Thread"的值。同时,主线程在for循环中打印出"main"的值。由于多线程的执行是异步的,所以"Thread"和"main"的输出顺序可能会交错。

二、实现Runnable接口:

1、创建一个实现了Runnable接口的类。

2、实现run()方法,在其中定义线程要执行的任务。

3、创建线程对象,并将实现了Runnable接口的对象作为参数传递给Thread类的构造函数。

4、调用start()方法启动线程。

代码示例:

public class Text  {
    public static void main(String[] args) {
        Runnable r=() ->{
            for(int i=0;i<10;i++){
                System.out.println(Thread.currentThread().getName()+"--"+i);
            }
        };
        new Thread(r).start();
        for(int i=0;i<10;i++){
            System.out.println("mian"+i);
        }
    }
}
public class Mythread implements Runnable {
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println("Thread" + i);
        }
    }
}

在这个示例中,我们定义了一个实现Runnable接口的MyThread类。该类实现了run()方法,在其中定义了线程要执行的任务。在main方法中,我们创建了一个MyThread对象myThread,然后将其作为参数传递给Thread类的构造函数创建一个新的线程。最后,调用start()方法启动线程。线程开始执行后,会同时运行run()方法中的代码块,打印出"Thread"的值。同时,主线程在for循环中打印出"main"的值。同样地,由于多线程的执行是异步的,所以"Thread"和"main"的输出顺序可能会交错。

三、线程的生命周期和状态

线程在其生命周期中会经历多个状态,包括新建、就绪、运行、阻塞和死亡等状态。不同状态之间的转换条件和触发方式如下:

新建状态:通过创建线程对象而进入新建状态。

就绪状态:当线程调用start()方法后,进入就绪状态,等待获取CPU资源。

运行状态:获取到CPU资源后,线程进入运行状态,开始执行任务。

阻塞状态:线程在执行过程中,可能由于等待某些条件或其他原因而暂停执行,进入阻塞状态。

死亡状态:线程执行完任务或异常终止后进入死亡状态。

代码示例:

public class MyThread extends Thread {
    public void run() {
        try {
            // 模拟线程执行任务
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

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

        // 新建状态
        Thread.State state = myThread.getState();
        System.out.println("初始状态:" + state);

        myThread.start();

        // 就绪状态
        state = myThread.getState();
        System.out.println("就绪状态:" + state);

        try {
            // 等待线程执行完毕
            myThread.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        // 终止状态
        state = myThread.getState();
        System.out.println("终止状态:" + state);
    }
}

总结

本文介绍了Java多线程编程的基础概念,包括多线程的优势、线程的创建和运行方式,以及线程的生命周期和状态转换。通过合理地利用多线程,我们可以实现并发处理、提高程序性能和改善用户体验。在实际开发中,深入理解多线程编程的基础知识是非常重要的,希望本文能为您提供一些帮助。

希望本篇文章能够帮助你理解Java多线程编程的基础知识,对于实际应用中的多线程编程有所启发。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java多线程基础之创建和运行 的相关文章

随机推荐

  • SQLite 3.7.13的加密解密

    原文链接 http lancelot blog 51cto com 393579 940805 http lancelot blog 51cto com 393579 940808 http lancelot blog 51cto com
  • stata移动平均插值法mipolate命令

    stata移动平均插值法mipolate命令 xtset id year by id mipolate x3 year gen x3 1 idw 4 idw表示取移动平均的项数 结果
  • Springboot框架通过@Scheduled实现定时任务

    一 开启定时任务方法 Scheduled定时任务是Spring boot自身提供的功能 所以不需要引入Maven依赖包 在项目入口main方法上加注解 EnableScheduling 开启定时任务 二 不同定时方式的解析 1 fixedD
  • rom查找表matlab,用matlab生成查找表输出coe文件给xilinx的Mem_IPCore使用

    这是一个coe文件的例子 Sample initialization file for a 32 bit wide by 16 deep RAM 这是注释说明性文字 memory initialization radix 16 2 10 1
  • 三、高级数据结构和算法:树的遍历

    3 树的遍历 树的遍历 是指依照一定的规律不反复地访问树中的每个节点 遍历是将非线性的树状结构按一定规律转化为线性结构 3 1 多叉树遍历 多叉树遍历分为深度优先遍历和广度优先遍历两类 3 1 1 深度优先遍历 Depth First Se
  • 基础算法题——整除光棍(Java大数)

    整除光棍 这里所谓的 光棍 并不是指单身汪啦 说的是全部由1组成的数字 比如1 11 111 1111等 传说任何一个光棍都能被一个不以5结尾的奇数整除 比如 111111就可以被13整除 现在 你的程序要读入一个整数x 这个整数一定是奇数
  • Java Date类,DateFormat类,Calendar类用法。

    1 Date类 java util Date 表示日期和时间的类 类Date表示特定的瞬间 精确到毫秒 毫秒 千分之一秒 1000毫秒 1秒 毫秒值的作用 可以对时间和日期进行计算 例如 可以对时间和日期进行计算 2088 01 03到20
  • Nginx自动化部署脚本(在线离线均适用)

    bin bash Author Wang Dajiang Date 2023 01 18 FileName install nginx sh csdn https blog csdn net sinat 41836475 type blog
  • .net mysql 特殊字符转义字符_MySQL 特殊字符转义问题

    模糊查询时 很多特殊字符都是有特定意义的 比如 等 这些在模糊查询中都是通配符 如果用户在前端的输入是没有限制的 那么 一旦输入相关特殊字符 就会获得错误的查询结果 出于需求的细致要求 这个问题是需要解决的 在网上找了很多资料 发现能够完全
  • 基于k-means聚类算法的城市出租车GPS时空分布特征分析

    目录 前言 一 研究目的 二 数据源 三 数据预处理 3 1 通用预处理 3 2 删除出租车数据中载客状态瞬间变化的记录 3 3 获取OD数据 3 4 判断每一辆出租车的OD数据中最靠近整点时刻的记录 采用字典形式储存 3 5 将每一整点时
  • AIGC赋能教育

    在这个科技迅速进步的时代 全球教育领域正迎来一场前所未有的数字化和技术化变革 而AIGC则是代表了人工智能与教育的融合 它正在改变着学习方式 提高教育质量 并重新定义了教育的未来 我们正在亲眼目睹AIGC如何塑造着全球教育的格局 为学生 教
  • 最新IDE流行度最新排名(每月更新)

    2023年09月IDE流行度最新排名 顶级IDE排名是通过分析在谷歌上搜索IDE下载页面的频率而创建的 一个IDE被搜索的次数越多 这个IDE就被认为越受欢迎 原始数据来自谷歌Trends 如果您相信集体智慧 Top IDE索引可以帮助您决
  • 查看Linux服务器上当前机器监听的端口信息

    netstat lntp
  • 找不到viewModels,viewModels()

    谷歌官方文档上学习mvvm 当我写到private val model UserViewModel by viewModels 时 viewModels 爆红 查了资料 找到gradle 添加依赖 dependencies implemen
  • (二)Java常量与变量

    Java常量与变量 主要内容 标识符 关键字 变量 数据类型 类型转换 常量 一 标识符与关键字 1 标识符 类的名字就是标识符 标识符的命名规则 标识符只能由字母数字下划线和美元符 组成 不能以数字开头 标识符不能有空格 标识符严格区分大
  • 龙蜥(Anolis) 编译PHP-8.1.22提示No supported shared memory caching support was found when configuring opcac

    龙蜥 Anolis 编译PHP 8 1 22提示No supported shared memory caching support was found when configuring opcac 使用龙蜥 Anolis 编译安装php8
  • SpringBoot入门最详细教程

    网上有很多springboot的入门教程 自己也因为项目要使用springboot 所以利用业余时间自学了下springboot和springcloud 使用下来发现springboot还是挺简单的 体现了极简的编程风格 大部分通用都是通过
  • 如何用ChatGPT使开发效率提高50%以上?

    简介 ChatGPT是一个大型语言模型 由OpenAI开发 它被训练用于进行对话式交互 能够理解和生成自然语言文本 ChatGPT可以用于多种任务和场景 包括但不限于 智能助手 创意生成 语言学习 编程辅助等 ChatGPT的优势在于它的广
  • Eclipse汉化教程

    在看了很多博主的安装教程后 我不是很懂为什么要查找版本号 此处提供另一种方法 1 查看eclipse安装时间 若刚安装的 请直接看第二条 打开eclipse 在help里找到about 具体请看下图的图标和位置 打开后 找到buildid
  • Java多线程基础之创建和运行

    前言 在现代软件开发中 多线程编程已经成为一项重要的技能 通过合理地利用多线程 我们可以实现并发处理 提高程序性能和改善用户体验 本文将介绍Java中多线程编程的基础知识 包括多线程的概念 线程的创建和运行 以及线程的生命周期和状态转换 一