进程和线程的区别;线程的多种创建方式;Thread 类及常见方法;线程的状态

news2024/11/15 18:07:38

文章目录

  • 进程和线程的区别
  • 线程的创建方式
    • 继承Thread,重写run(创建单独的类/匿名内部类)
    • 实现Runnable,重写run(创建单独的类/匿名内部类)
    • 实现Callable,重写call(创建单独的类/匿名内部类)
    • 使用lambda表达式
    • ThreadFactory线程工厂
    • 线程池
  • Thread 类及常见方法
    • Thread 的常见属性
    • 启动一个线程-start()
    • 等待一个线程-join()
  • 线程的状态

进程和线程的区别

  1. 进程是系统进行资源分配和调度的一个独立单位,线程是程序执行的最小单位。
  2. 进程包含一个或者多个线程。
  3. 进程有自己的内存地址空间(进程与进程间具有独立性),线程只独享指令流执行的必要资源,如寄存器和栈。
  4. 由于同一进程的各线程间共享内存和文件资源(共用同一份资源,省去了申请资源的开销),可以不通过内核进行直接通信。
  5. 线程的创建、切换及终止效率更高。(创建线程比创建进程更快、销毁线程比销毁进程更快、 调度线程比调度进程更快)(线程更轻量、高效)

设想如下场景:
一家公司要去银行办理业务,既要进行财务转账,又要进行福利发放,还得进行缴社保。
如果一个人就会忙不过来,耗费的时间特别长。为了让业务更快的办理好,三个人分别负责一个事情,分别申请一个号码进行排队,自此就有了三个执行流共同完成任务,但本质上他们都是为了办理一家公司的业务。此时,就把这种情况称为多线程,将一个大任务分解成不同小任务,交给不同执行流分别排队执行。
每个客户来银行办理各自的业务,但他们之间的票据肯定是不想让别人知道的,而上面我们的公司业务中虽然是
不同的执行流,但因为办理的都是一家公司的业务,所以票据是共享着的。这个就是多线程和多
进程的最大区别。

线程的创建方式

继承Thread,重写run(创建单独的类/匿名内部类)

class MyThread extends Thread {
    @Override
    public void run() {
        System.out.println("这里是线程运行的代码");
   }
}
// 使用匿名类创建 Thread 子类对象
Thread t1 = new Thread() {
    @Override
    public void run() {
        System.out.println("使用匿名类创建 Thread 子类对象");
   }
};

实现Runnable,重写run(创建单独的类/匿名内部类)

class MyRunnable implements Runnable {
    @Override
    public void run() {
        System.out.println("这里是线程运行的代码");
   }
}
// 使用匿名类创建 Runnable 子类对象
Thread t2 = new Thread(new Runnable() {
    @Override
    public void run() {
        System.out.println("使用匿名类创建 Runnable 子类对象");
   }
});

实现Callable,重写call(创建单独的类/匿名内部类)

使用lambda表达式

// 使用 lambda 表达式创建 Runnable 子类对象
Thread t3 = new Thread(() -> System.out.println("使用匿名类创建 Thread 子类对象"));
Thread t4 = new Thread(() -> {
    System.out.println("使用匿名类创建 Thread 子类对象");
});

ThreadFactory线程工厂

线程池

Thread 类及常见方法

线程是操作系统中的概念. 操作系统内核实现了线程这样的机制, 并且对用户层提供了一些 API 供用户使
用(例如 Linux 的 pthread 库).
Java 标准库中 Thread 类可以视为是对操作系统提供的 API 进行了进一步的抽象和封装.

Thread 的常见属性

在这里插入图片描述

启动一个线程-start()

调用 start() 方法,线程才真正独立去执行了。

等待一个线程-join()

线程的状态

NEW: 安排了工作, 还未开始行动
RUNNABLE: 可工作的. 又可以分成正在工作中和即将开始工作.
BLOCKED
WAITING
TIMED_WAITING: (简单来说)都表示排队等着其他事情
TERMINATED: 工作完成了.

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2165611.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

828华为云征文 | 云服务器Flexus X实例,Docker集成搭建 Jupyter Notebook

828华为云征文 | 云服务器Flexus X实例,Docker集成搭建 Jupyter Notebook Docker 部署 Jupyter Notebook 是一个方便且快速的方式,可以帮助你搭建一个用于数据分析、机器学习和科学计算的环境 华为云端口放行 服务器放行对应端口9955 Docker安装并配置镜…

计算物理精解【1】-C++计算(1)

文章目录 基础hello,worldgetlinestd::cin引用与指针函数数据类型基本数据类型更多类型sizeof 正则表达式单次匹配多次匹配组匹配字符串的匹配 splitmap基础实战整型变量符号表简单分析生成整型变量表 正则表达式基础regex_matchregex_replaceswap Eigen概述简单例子Matrix基础…

DNS协议解析

DNS协议解析 什么是DNS协议 IP地址:一长串唯一标识网络上的计算机的数字 域名:一串由点分割的字符串名字 网址包含了域名 DNS:域名解析协议 IP>域名 --反向解析 域名>IP --正向解析 域名 由ICANN管理,有级别&#xf…

2.1 HuggingFists系统架构(二)

部署架构 上图为HuggingFists的部署架构。从架构图可知,HuggingFists主要分为服务器(Server)、计算节点(Node)以及数据库(Storage)三部分。这三部分可以分别部署在不同的机器上,以满足系统的性能需求。为部署方便,HuggingFists社区版将这三部…

Python | Leetcode Python题解之第419题棋盘上的战舰

题目: 题解: class Solution:def countBattleships(self, board: List[List[str]]) -> int:return sum(ch X and not (i > 0 and board[i - 1][j] X or j > 0 and board[i][j - 1] X)for i, row in enumerate(board) for j, ch in enumerat…

vue全局注册和局部注册的区别

1.全局注册: a、b为注册的组件 2.局部注册 3.有图可以看出,全局注册会影响白屏时间

2024最新Python Debugger工具pdb的用法(深度学习项目),了解输入输出的形状大小

侵入式方法 (在被调试的代码中添加以下代码然后再正常运行代码) import pdb pdb.set_trace() 例如: 正常运行训练文件后: 在命令行发现输出以下内容: 出现了(Pdb) 的提示符,说明已经打开pdb 在使用Pyth…

解决fatal: unable to access ‘https://........git/‘: Recv failure: Operation time

目录 前言 解决方法一 解决方法二 解决方法三 解决方法四 总结 前言 在使用 Git 进行代码拉取时,可能会遇到连接超时的问题,特别是在某些网络环境下,例如公司网络或防火墙严格的环境中。这种情况下,Git 无法访问远程仓…

红帽认证会过期吗?一文给你解释清楚!

红帽认证以其权威性、实用性和高含金量受到了广大IT人士的青睐,尤其是Linux领域。然而,许多人在考取红帽认证后,心中都有一个疑问:红帽认证会过期吗?本文将为大家详细解答这个问题。 红帽认证是什么? 红帽认证是由红帽公司(Re…

Windows 2003系统的防护技巧,禁止IPC$空连接

一、修改管理员帐号和新建“陷阱”帐号 多年以来,微软一直在强调建议重命名Administrator账号并禁用Guest账号,提高计算机的安全性。Windows Server 2003系统,Guest 账号是默认禁用的,管理员账号默认是Administrator,…

html 几行的空间分成3个区域

1.代码 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>三个区域示例</title> …

深入解析Python 中的 sortedcontainers 库:高效的排序数据结构

在日常的 Python 编程中&#xff0c;列表&#xff08;list&#xff09;、集合&#xff08;set&#xff09;和字典&#xff08;dict&#xff09;是常用的数据结构。然而&#xff0c;在某些特定的场景下&#xff0c;我们需要对数据进行排序&#xff0c;并且希望在插入、删除或访问…

4.2章节python中选择结构

选择结构主要通过if、elif&#xff08;else if的缩写&#xff09;和else语句来实现。这些语句允许程序根据条件执行不同的代码块。另外还有表达式中多个条件连接等。 一、基本语句if if 语句后面跟一个条件表达式&#xff0c;如果条件为真&#xff08;True&#xff09;&#…

Machine Learning Specialization 学习笔记(4)

文章目录 前言一、模型评估训练集常规训练集线性回归逻辑回归 交叉验证集 偏差与方差正则化 学习曲线数据集的添加&#xff08;数据增强&#xff09;迁移学习精确率与召回率 二、决策树基本概念决策树的工作原理决策树的优点决策树的缺点决策树算法的变体决策树在Python中的实现…

OpenCV4.8 开发实战系列专栏之 01- 环境搭建与图像读写

大家好&#xff0c;欢迎大家学习OpenCV4.8 开发实战专栏&#xff0c;长期更新&#xff0c;不断分享源码。 专栏代码全部基于C 与Python双语演示&#xff0c;专栏答疑群 请联系微信 OpenCVXueTang_Asst 本文关键知识点&#xff1a; 开发环境搭建、读取图像与显示图像,读取图像…

什么是换电连接器

换电连接器是一种高压连接器&#xff0c;安装在整车中&#xff0c;属于车载连接器。它利用导体和绝缘体的特性&#xff0c;将电能和数据信号从换电站设备传输到电动汽车的电池组&#xff0c;实现能源的快速补充。换电连接器通常由插头和插座两部分组成&#xff0c;通过精密的对…

紫光展锐 携手摩托罗拉在全球市场推出强竞争力5G手机moto G35

moto G35 5G亮点 ■ 高清视界&#xff1a;6.72英寸FHDLCD屏幕&#xff0c;120Hz高刷新率&#xff1b; ■ 震撼音效&#xff1a;配备立体声扬声器和杜比全景声Dolby Atmos&#xff1b; ■ 大师影像&#xff1a;5000万像素后置AI相机&#xff1b; ■ 强劲核芯&#xff1a;紫光…

计算机毕业设计Hadoop+Spark知识图谱美团美食推荐系统 美团餐厅推荐系统 美团推荐系统 美食价格预测 美团爬虫 美食数据分析 美食可视化大屏

《HadoopSpark知识图谱美团美食推荐系统》开题报告 一、引言 随着互联网技术的快速发展&#xff0c;大数据已成为企业竞争力的关键要素。美团作为国内领先的本地生活服务平台&#xff0c;拥有海量的用户行为数据和丰富的业务场景。为了进一步提升用户体验&#xff0c;提高推荐…

JVM内存区域详解及DirectByteBuffer内存

Java虚拟机&#xff08;JVM&#xff09;是Java程序运行的基础&#xff0c;它为Java程序提供了一个与平台无关的执行环境。JVM内存区域的划分对于理解Java程序的运行机制至关重要。本文将详细介绍JVM的内存区域&#xff0c;并探讨对外内存中的DirectByteBuffer。 方法区&#x…

炉石传说辅助攻略—VMOS云手机助攻:国服回归任务要点,哪个辅助更好?

在《炉石传说》中想要轻松完成各种任务并享受游戏的乐趣&#xff0c;VMOS云手机是您的最佳辅助工具&#xff01;VMOS云手机为《炉石传说》提供了专属定制版的云手机&#xff0c;内置游戏安装包&#xff0c;不需要重新下载安装游戏&#xff0c;让您快速上手。更棒的是&#xff0…