Java基础:初识线程,进程,了解主线程与创建多线程的两种方式

35:Java多线程:初识Java多线程 本文是java多线程的一个入门的基础知识。首先需要记住这两个单词:Process进程、Thread线程,在说进程和线程之前,还必须说一下 :程序,这个词。程序:是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念。听起来很抽象,这里为了好理解可以将这里的理解为我们写的。代码没有运行就是死的是静态的。进程则是执行程序的一次执行过程,它是一个动态的概念。是系统资源分配的单位。通常在一个进程中可以包含若干个线程,当然一个进程中至少有一个线程,不然没有存在的意义。 阅读详情

线程相关概念

并行与并发

概念阶段:

  • 并行:指两个或多个事件在同一时刻发生。同时执行
  • 并发:指两个或多个事件在同一时间段内发生。交替执行

在这里插入图片描述

进程与线程

进程:是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间,一个应用程序可以同时运行多个进程;
进程是程序的一次执行过程,是系统运行程序的基本单位;系统运行一个程序即是一个进程从创建、运行到消亡的过程。
线程:线程是指进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程,一个进程中是可以有多个线程的,这个应用程序可以称之为多线程程序
简而言之:一个程序运行后至少有一个进程,一个进程可以包含多个线程。
比如我们电脑中的安全管家,我们将他的exe文件打开,就算是执行了它的进程。而它打开后里面可以同时杀毒、清理垃圾。这就是多线程
在这里插入图片描述

线程的调度

线程的调度:

  • 1.分时调度
    所有线程轮流使用CPU的使用权,平均分配每个线程占用CPU的时间
  • 2.抢占式调度
    优先让优先级高的线程使用CPU,如果线程的优先级相同,那么会随机选择一个(线程随机性),Java使用的为抢占式调度。

线程优先级可以设置,通过任务管理器-详细信息-右键进程-右键设置优先级
CPU使用抢占式调度模式在多个线程间进行高速的切换1/n,对于一个核的CPU,只能执行一个线程,它只不过是在多个线程间飞速转换
多线程程序并不能提高程序的运行速度,但可以提高程序运行效率,让CPU的使用率更高。

主线程

主线程:执行主方法(main)的线程

  • 单线程程序:java程序中只有一个线程

  • 执行从main方法开始,从上到下依次执行

  • JVM执行main方法,main方法会进入到栈内存

  • JVM会找操作系统开辟一条main方法通向cpu的执行路径

  • cpu就可以通过这个路径来执行main方法

  • 这个路径就叫main主线程

package demo01;
public class Person {
    private String name;
    public String getName() {
        return name;
    }
    public void run(){
        for (int i = 0; i <20; i++) {
            System.out.println(name+i);
        }
    }
    public void setName(String name) {
        this.name = name;
    }
    public Person() {
    }
    public Person(String name) {
        this.name = name;
    }
}
public class DemoMainThread {
    public static void main(String[] args) {
        Person p1 = new Person("小王");
        p1.run();
        System.out.println(0/0);//会发生异常,单线程的弊端:出现异常后,后面的程序就不会再运行了。
        Person p2 = new Person("小金");
        p2.run();
    }

创建多线程的方式

创建Thread类的子类

创建多线程程序的第一种方式:创建Thread类的子类

  • java.lang.Thread类:是描述线程的类,我们想要实现多线程程序,就必须继承Thread类

实现步骤:

  •   1.创建一个Thread类的子类
    
  •   2.在Thread类的子类中重写Thread类中的run方法,设置线程任务(开启线程要做什么?)
    
  •   3.创建Thread类的子类对象
    
  •   4.调用Thread类中的方法start方法,开启新的线程,执行run方法
    

注意:
void start()使该线程开始执行;Java虚拟机调用该线程的run方法
结果是两个线程并发的运行;当前线程(main线程)和另一个(创建的新线程,执行其run方法)
多次启动一个线程是非法的,特别是当线程已经结束执行后,不能再重新启动
java程序属于抢占式调度,哪个线程的优先级高,哪个线程优先执行,同一个优先级,随机执行一个

package demo01;
//*       1.创建一个Thread类的子类
public class MyThread extends Thread{
    //*       2.在Thread类的子类中重写Thread类中的run方法,设置线程任务(开启线程要做什么?)

    @Override
    public void run() {
        for (int i = 0; i <10 ; i++) {
            System.out.println("run"+i);
        }
    }
}
 public class Demo01Thread {
    public static void main(String[] args) {
        //*       3.创建Thread类的子类对象
        MyThread mt = new MyThread();
        //*       4.调用Thread类中的方法start方法,开启新的线程,执行run方法
        mt.start();
        for (int i = 0; i < 10; i++) {
            System.out.println("main"+i);
        }
        //因为是多线程的原因,两个线程相互抢占式调度,每次输出的顺序不同。
    }
}
实现Runnable接口

创建多线程程序的第二种方式:实现Runnable接口
java.lang.Runnable
Runnable接口应该由那些打算通过某一线程执行其实例的类来实现。类必须定义一个称为run的无参方法

  • java.lang.Thread类的构造方法
  • Thread(Runnable target) 分配新的Thread对象
  • Thread(Runnable target,String name)分配新的Thread对象

实现步骤:

  • 1.创建一个Runnable接口的实现类
  • 2.在实现类中重写Runnable接口的run方法,设置线程任务
  • 3.创建一个Runnable接口的实现类对象
  • 4.创建Thread类对象,构造方法中传递Runnable接口的实现类对象
  • 5.调用Thread类中的start方法,开启新的线程执行run方法
package demo01;
//*   1.创建一个Runnable接口的实现类
public class RunnableImpl implements Runnable {
    //*   2.在实现类中重写Runnable接口的run方法,设置线程任务
    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println("run"+i);
        }
    }
}
public class Demo02Runnable {
    public static void main(String[] args) {
        //*   3.创建一个Runnable接口的实现类对象
        RunnableImpl rb = new RunnableImpl();
        //*   4.创建Thread类对象,构造方法中传递Runnable接口的实现类对象
        Thread t = new Thread(rb);
        //*   5.调用Thread类中的start方法,开启新的线程执行run方法
        t.start();
    }
}
Java多线程--对比创建多线程的两种方式 阅读详情

相关推荐

量子密钥分发(QKD)原理、工程实现与实战部署全解析

密钥分发是信息安全的核心基础,它解决了通信双方如何安全共享秘密密钥的难题。传统方法依赖于数学问题的计算复杂性,而量子密钥分发(QKD)则基于量子力学原理,为密钥分发提供了信息论安全的物理保障。其核心价值在于,利用量子不可克隆定理和测量坍缩原理,使得任何窃听行为都会被合法通信方检测到,从而在理论上实现无条件安全的密钥协商。这项技术特别适用于对安全性要求极高的场景,如金融数据同步、政务专网和电力系统保护。本文聚焦于量子保密通信,深入剖析了以BB84协议为代表的QKD工作原理,并详细拆解了包含单光子探测、偏振编码

weixin_29324401的博客 345

Java主线程和其余线程的区别和实践(Main、Runnable、Thread)

在日常的开发中,很多一些开发中较常见的问题,还是需要去仔细研究一下,最重要的还是实践。以小见大。 一、Java线程中。Main、Runnable和Thread。 相信在工作中,只要是有用到多线程异步编程,最起码都要和这三个打交道。 1、每个Java应用程序都有一个执行Main()函数的默认主线程。这个就是主线程 2、应用程序也可以创建线程在后台运行。Java主要是通过Java.Lang.Thr...

向小凯同学学习 5551

24V供电D1047/B817对管AB类音频功放设计与制作全解析

音频功率放大器是电子系统将微弱音频信号放大驱动扬声器的核心电路,其核心原理是通过晶体管或集成电路对信号进行电压和电流放大。从技术价值看,优秀的功放设计需兼顾效率、保真度与稳定性,AB类放大器便是经典折中方案,它在A类低失真与B类高效率间取得平衡。在应用场景上,这类电路广泛应用于家用音响、多媒体音箱、车载音频及DIY音频项目。本文聚焦于一个采用24V直流供电、以D1047和B817互补对管为核心输出级的AB类功放实例,深入剖析其**电路设计**与**元件选型**,涵盖从BC547小信号放大、偏置设置、PCB布

weixin_31355483的博客 413

java 主线程_Java主线程

当Java程序启动时,一个线程立刻运行,该线程通常叫做程序的主线程(main thread),因为它是程序开始时就执行的。主线程的重要性体现在两方面:它是产生其他子线程的线程;通常它必须最后完成执行,因为它执行各种关闭动作。尽管主线程在程序启动时自动创建,但它可以由一个Thread对象控制。为此,你必须调用方法currentThread()获得它的一个引用,currentThread()是Thre...

weixin_42516490的博客 318

机器学习-02 模型的评估与选择

2.1 误差与过拟合 我们将学习器对样本的实际预测结果与样本的真实值之间的差异成为:误差(error)。定义: 在训练集上的误差称为训练误差(training error)或经验误差(empirical error)。 在测试集上的误差称为测试误差(test error)。 学习器在所有新样本上的误差称为泛化误差(generalization error)。 显然,我们希望得到的是在新样本上表现得很好的学习器,即泛化误差小的学习器。因此,我们应该让学习器尽可能地从训练集中学出普适性的“一般特征”,这

一个小白 1703

python全栈入门到实战【基础篇 02】环境搭建:Python解释器与PyCharm、VSCode编辑器安装配置详解

本文详解Python环境搭建步骤。首先安装解释器(运行代码核心),需从官网下载,选3.8及以上版本(勿选2.x)。Windows安装必勾“Add Python.exe to PATH”,验证用`python --version`;Mac选universal2安装包,验证用`python3 --version`。 编辑器二选一:PyCharm社区版(免费,新手推荐),安装后需配置解释器路径;VSCode轻量,需装Python插件并选择解释器。

那些看似不起波澜的日复一日,会在某天让你看到坚持的意义 5万+

Java中的主线程

文章目录概览主线程怎么来控制主线程主线程和main()函数的关系主线程中的死锁(单个线程) 概览 前段时间有同事提到了主线程这个名词,但当时我们说的主线程是指Java Web程序中每一个请求进来时处理逻辑的线程。当时感觉这个描述很奇怪,所以就来研究下这个主线程的确切语义。 Java提供了内置的多线程编程支持,多线程包括两个或多个可并发执行的部分,每一部分叫做线程,每个线程定义了单独的执行部分。 主线程 当一个Java程序启动的时候,会有一个线程立即开始运行,这个线程通常被我们叫做程序中的主线程,因为它是在我

靖哥哥的博客 1266

3、数据导入与清洗:Excel、SQL、SPSS、Stata和SAS数据处理

本文详细介绍了如何从Excel文件、SQL数据库以及SPSS、Stata和SAS等统计软件中导入和清洗数据。针对不同数据来源的特点,提供了具体的处理方法,包括跳过无用行、重命名列、处理缺失值、转换数据类型、保留元数据等关键步骤。同时,通过实际应用案例展示了如何整合多源数据,并总结了数据导入和清洗的最佳实践,帮助读者高效完成数据预处理工作,为后续的数据分析打下坚实基础。

133

java 多线程

java线程基础;主要内容: 1.进程和线程 2.Thread类 3.多线程的启动方式 4.线程常用API 5.线程生命周期 6.线程同步 7.死锁

m0_66252560的博客 1660

保姆级教程:一步步创建 ABAP Text Table

有朋友反馈,问有没有一个自己动手创建 Text Table 的例子,因为自己没有动手实践过,总觉得心里不踏实。这个行为的语义是,ZAI_TYPE_T 这张表的 AI_TYPE 字段值,不能随便维护,必须是表。然后另一个需要添加的字段是 AI_TYPE 这个字段值对应的文本值,本例笔者采用 SAP 标准的。也是自己创建的,很简单的一个 Data Element,类型为 CHAR,长度为 2.依次给主表的 01,02,03 三个字段值维护对应的描述信息,最后效果如下。按照下面的字段结构,创建另一。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 4274

Python爬虫逆向案例:某云片滑块验证码分析-滑动验证码

今天我们看个滑块。

2201_76125393的博客 1034

Java 程序中主线程是什么

主线程(Main Thread)是程序启动时,由操作系统自动创建并且默认执行的线程。它是程序中第一个被创建并执行的线程,负责启动程序并通常用于管理程序的主要流程。所有 Java 程序在启动时都会有一个主线程,除非显式地创建新的线程。

weixin_44594317的博客 1026

0.嵌入式控制器EC实战 Embedded Controller开发概述

文章目录前言1.嵌入式控制器EC概述2.EC芯片框图(IT8502为例)3.General Purpose I/O Port (GPIO)4.SMBus(System Management Bus,系统管理总线)5.PWM、TACH6.KBC(KeyBoard Controller)7.PS/28.ADC(模数转换)总结 前言 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 1.嵌入式控制器EC概述 嵌入式控制器EC是挂在CPU的L

qq_30135687的博客 1万+

Java多线程(1)---多线程认识、四种创建方式以及线程状态

本文讲解的是多线程的入门知识、多线程的创建、多线程状态讲解等知识点详细讲解,多线程的第一步知识,详细

tq02的博客 2153

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

多线程的初识和创建

线程的介绍,线程和进程的区别,Java中多线程的创建,优势是什么,以及在什么场景下才会使用它

bit me的博客 1985

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

多线程学习笔记01线程、进程、多线程与线程创建

多线程学习笔记01线程、进程、多线程与线程创建。

2501_90425057的博客 1667

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

进程与线程,线程的两种创建方式

程序:一条一条的按照语法规则排列起来的指令序列,告诉计算机完成一连串的操作,程序默认的是保存在硬盘上的; 当程序开始执行的时候,OS(操作系统)要把程序装入内存,然后CPU从内存中一条一条的读取并执行指令; 当一个程序被装入内存,正在执行的时候,这时这个程序就被称为一个进程(正在进行的程序); OS(操作系统)是如何做到多进程同时执行的呢? 操作系统把时间单位平均分成若干小

乘风晓栈的博客 2341

简述两种JAVA多线程的创建方式

一、概述 在JAVA中,用Thread类代表线程,所有线程对象,都必须是Thread类或者Thread类子类的实例。每个线程的任务就是执行一段顺序执行的代码,JAVA使用线程执行体来容纳这段代码 二、多线程的好处 1.充分利用CPU资源 2.简化代码模型 3.提高用户体验 三、创建多线程的两种方式 第一种, 通过继承Thread类创建线程类 1、定义一个类继承Thread类,并重写Thread类的run()方法,run()方法的方法体就是线程要完成的任务,因此把run()称为线程的执行体; 2、创建该类的实

m0_46660951的博客 2899

22、java 多线程之一:继承 Thread 类创建多线程(方式一)、实现 Runnable 接口创建多线程(方式二)、两种方式创建多线程利弊及问题

/ 设置线程的优先级操作、获取当前代码的线程操作、获取和设置当前线程的名称操作、释放线程当。内的偶数,一个进程遍历。// 发现:确实是启动了。// 发现:确实是启动了。// 发现:确实是启动了。内的偶数,且可以获取和。// 发现:确实是启动了。问题,后面会被解决;问题,后面会被解决;

狮子座的男孩 1491

Java多线程的四种创建方式

分享了Java多线程的四种创建方式

xieyichun_的博客 1183

java中多线程、并发、并行、线程与进程、线程调度、创建线程的方式

java中多线程、并发、并行、线程与进程、线程调度、创建线程的方式

专研前端,探索后端 1366

多线程1:线程的创建方式

线程(Thread)是一个程序内部的一条执行流程。多线程:指从软硬件上实现的多条执行流程的技术(多条线程由CPU负责调度执行)。//目标:掌握线程的创建方式2:实现Runnable接口//2、创建MyRunnable任务对象//3、把任务对象交给Thread类的构造器,将其封装为一个线程对象//4、调用线程对象的start方法启动线程。t1.start();//主线程的任务i < 5;i++) {System.out.println("主线程输出:"+i);

casually的博客 1780

Java多线程编程基础:进程与线程、并发与并行

理解进程与线程和并发与并行是Java多线程编程的基础。Java提供了多种创建线程的方式,开发者应根据具体需求选择最合适的方式。在多线程编程中,线程安全和资源管理是需要特别注意的问题。后续可以进一步学习线程同步、线程池等高级主题来提升多线程编程能力。希望这篇文章能帮助你更好地理解多线程编程基础中进程与线程和并发与并行的概念。如果你有任何问题或建议,欢迎在评论区留言讨论。

xOVOx___的博客 990

Java多线程与高并发专题——基础概览与线程创建

Java多线程与高并发专题——基础概览与线程创建

从知识输入到知识输出 1054

Java实现多线程的两种方式讲解

1、两种方式 继承Thread和实现Runnable接口 a、Runnable是一个接口,该接口中只包含了一个run()方法。我们可以定义一个类A实现Runnable接口;然后,通过new Thread(new A())等方式新建线程,通过这种方式创建出来的多个线程共享A类对象的数据。它的定义如下: public interface Runnable { public abstract void run(); } b、...

wangqsse的博客 1964

Java多线程~认识进程与线程、掌握创建线程的方式

目录 进程与线程 进程 什么是进程? 进程管理 进程的状态 线程 什么是线程? 线程的实现方式 进程与线程的关系 Java线程和操作系统线程的关系 多线程的优点和缺陷 三种方式创建线程 继承Thread 自定义一个类继承Thread 使用匿名内部类 实现Runnable接口 自定义一个类来实现Runnable接口 匿名内部类实现 实现Callable接口 进程与线程 进程 什么是进程? 进程是操作系统对一个正在运行的程序的一种抽象,也可以把进程看做程序的..

qq_58284486的博客 531
上一篇: Java基础:异常的注意事项与自定义异常的概念、使用。
下一篇: Java基础:Thread类常用方法,Thread与Runnable的区别,匿名内部类实现线程的创建
JinxLin
博客等级 码龄7年 8粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值