【Java中的线程】java.lang.Thread 类分析

Java47

进程和线程

联想一下现实生活中的例子--烧开水,烧开水时是不是不需要在旁边守着,交给热水机完成,烧开水这段时间可以去干一点其他的事情,例如将衣服丢到洗衣机中洗衣服。这样开水烧完,衣服洗的也差不多了。这样既能喝到热水,衣服也差不多了。
在操作系统中,多个程序(如上面的热水器进程和洗衣机进程)同时交替执行,称为进程。

[En]

In the operating system, multiple programs (such as the water heater process and washing machine process above) are executed simultaneously and alternately, which are called * processes.*

那么操作系统为什么需要进程。
通常,操作系统进行IO处理相比计算慢得多
通过Java 进行IO 和 运算测试,IO 的速率大概比运算慢200-400倍
而IO是不需要使用CPU的,这由IO设备完成。而正在运行的程序只能等待IO设备,这样会造成性能瓶颈。所以可以通过切换到其他任务来提高CPU的吞吐率。

以下仅考虑单核情况

那么当遇到IO操作时,操作系统需要切换进程。提醒OS切换的可以是中断,定时器,进程退出等外部事件。
如果有多个任务,应该选择哪一个来运行,这需要 调度器来抉择。
以及如果两个进程需要进行合作例如需要读取检索当前目录并对该目录的文件名进行排序,这称之为进程间的 通信(Inter Process Communication ,IPC)问题。这里只提及一下不做深入研究。

线程的概念和进程的概念很相似,那么有了进程为什么还要线程。

  • 首先,每个进程使用不同的地址空间,对于多个进程,多个并行实体可以拥有相同的地址空间。
    [En]

    first of all, each process uses a different address space, and with multiple processes, multiple parallel entities can have the same address space.*

  • 其次,线程比进程更轻,它们更快、更容易创建和更容易撤消。
    [En]

    secondly, threads are lighter than processes, they are faster, easier to create and easier to undo.*

  • 最后,如果多个线程都是CPU密集型的(需要持续计算),那么不能获得性能上的增强,如果存在这大量的计算和 I/O处理,拥有多线程会加快程序执行的速度。
输入验证码查看隐藏内容

扫描二维码关注本站微信公众号 Johngo学长
或者在微信里搜索 Johngo学长
回复 svip 获取验证码
wechat Johngo学长

相关文章
Java

数据类型(Java)

数据类型分类 1.基本数据类型 数值类型: 整数类型: byte【(1个字节),范围:-128-127】 short【(2个字节),范围:-32768-32767】 int【(4个字节),范围:-21...
Java

docker安装Kafka(windows版)

windows环境安装docker参考安装docker桌面版(Windows) 这一步如果出现报错的话可以直接输入wsl -l -v命令来查看当前Ubuntu的wsl版本 安装Kafka需要先安装 z...
Java

设计模式之责任链模式

本文通过图书馆管理系统中,用户名校验、密码校验、需要增加问题,每次都要增加if判断语句,将其改用责任链模式进行链式调用,为了让代码更加的优雅,我们使用之前学过的建造者模式就代码进行改造。接着我们会介绍...
Java

Discuz论坛 自动加好友留言程序

这次不同,想要在论坛发消息首先是要登录的,所以必须要一个账号,接着是让爬虫登录,这是最重要的一个步骤,登录后获取Cookie存储,在加好友发消息的时候都要用到Cookie。 在开发过程中,遇到了不少难...
Java

Java 16 新特性:instanceof增强

instanceof这个关键词,主要用来判断某个对象是不是某个类的实例。 比如,有时候我们要处理一个类似这样的数据集: Map data = new HashMap<>(); data.p...
Java

Redis概述及基本数据结构

Redis 是一个基于内存的键值型 NoSQL 数据库 特征: 键值型:value 支持多种不同数据类型,功能丰富 单线程:每个命令具备原子性 延迟低、速度快: 基于内存、IO多路复用、良好的编码 支...
Java

java 异常类与自定义异常

目录 异常类 Exception 类的层次 throws/throw 关键字: throws: throw: try catch finally语句 声明自定义异常 异常类 在 Java 中一个异常的...
Java

Java中的反射机制

1.聊聊Java中的反射机制 (1)先说说静态编译和动态编译: ①静态编译就是在编译的时候把你所有的模块都编译进exe里去,当你启动这个exe的时候所有模块都加载进来了。你写小程序没问题,但程序一大,...
Java

DHCP 动态主机设置协议 分析

在TCP/IP网络中,每个接口都需要一个IP地址、子网掩码和广播地址( IPv6中没有),简单来说就是需要网络配置信息。如果想访问外部网络可以通过DNS获取外部地址,再通过路由间接转发出去。但是在"家...
Java

图解定时任务线程池

线程池概念 我们上篇文章分析了ThreadPoolExecutor,如果要用一句话说明它的主要优势,就是线程置换。还有Executors工具类,极大的简化了研发人员工作。 我用一个图重复描述下线程池概...
Java

Mybatis-Plus初步上手!!

1.简介 1.1、特性 2.快速开始 3.配置日志 4.CRUD拓展 4.1、插入 4.2、更新 4.3、查询 4.4、删除 5.性能分析插件 6.条件构造器Wrapper 7.代码生成器 8.配置文...