进程、线程、线程组、线程池

news/2025/3/11 11:28:44/文章来源:https://www.cnblogs.com/KL2016/p/18764679

进程:进程是资源分配的最小单位;进程=独立的代码+数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1-n个线程;

线程:线程是CPU调度的最小单位;线程=堆栈+程序计数器+同一类线程共享的代码和数据空间,线程的切换开销较小;

线程组:线程可以分组,Java默认创建的线程都属于系统线程组;作用是:出于安全考虑;因为同一个线程组的线程可以相互修改对方的数据;如果不是同一个线程组中,则不能修改,所以可以保证数据安全;

线程池:专门用来存放很多线程的池子;作用是:出于效率考虑;由于线程的创建和结束都需要消耗系统资源,频繁的创建肯定是降低性能的。因此将线程放在线程池中,使得线程重复使用,可以省去线程的反复创建与销毁,从而节省时间,提高效率;

【线程池和线程组共同点】

1、都是管理一定数量的线程;

2、都可以对线程进行控制——休眠、唤醒、结束、创建、中断、暂停,但不一定包含全部这些操作。

设置线程任务的方式:Thread 、Runnable 、Callable (run/call方法)

创建并启动线程的方式:Thread的start();线程池的submit()方法

 

【线程的创建】

Thread

1、通过继承Thread类的方式,重写run方法,则设置了线程的任务;run()方法是线程的任务;

class MyThread extends Thread{}

创建线程并启动的方式:new MyThread().start();

2、通过实现Runnable接口的方式,实现run方法,则设置了线程的任务;run()方法是线程的任务;

class MyRunnable implements Runnable{

@Override

void run(){}

}

创建线程并启动的方式:new Thread(new MyRunnable()).start();

3、通过实现Callable接口的方式,实现call方法,则设置了线程的任务;call()方法是线程的任务;

class MyCallable implements Callable{

@Override

call(){ return T;}

}

创建线程并启动的方式:

CallablemyCallable = new MyCallable();

FutureTaskfutureTask = new FutureTask(myCallable);

new Thread(futureTask).start();

try{

futureTask.get();

}catch(Exception e){

e.printStackTrace();

}

Thread和Runnable的异同:

1、Thread是一个类,需要继承;Runnable是一个接口,需要实现;由于Java是单继承,所以推荐Runnable方式创建线程;

2、Thread类中的start方法启动线程后,事实上在运行时执行的是Runnable的run方法(Thread的源码中有一个Runnable target的属性,当我们调用thread的start方法时,事实就是运行时执行了target的run方法;start方法和run方法耦合在一起);而Runnable在启动线程时,是先new一个Runnable类的实例,在包装成一个Thread的实例,在执行start方法。就好像把线程的创建和具体的业务做了解耦,代码和数据独立。多线程下可以共享资源;

如:Runnable runnable = new MyRunnable();

Thread t1 = new Thread(runnable);

Thread t2 = new Thread(runnable);

t1.start();

t2.start();

示例中,创建了两个线程,最终使用了同一个Runnable实例。如果Runnable实例中包含了一个类变量,那么两个线程对这个变量操作就相互影响,这个变量就是共享的;

3、线程池只能放入Runable或Callable类线程,不能直接放入继承Thread的类。

Runnable相比Thread的优势:

1、适合多个相同的程序代码的线程去共享一个资源;

2、避免Java中单继承的局限性;

3、增加程序的健壮性,实现解耦操作,代码可以被多个线程共享,代码和线程独立。(实现Runnable接口的方式,把设置线程任务和开启线程进行了分离(解耦),实现类中重写了run方法来设置线程任务,而创建Thread类对象调用start方法只是用来开启新的线程)

4、线程池只能放入Runable或Callable类线程,不能直接放入继承Thread的类。

Runnable和Callable的异同:

1、两个都是接口,需要实现;

2、Runnable的run方法没有返回值,也不能抛出异常;Callable的call方法有返回值,还支持通过泛型规定call的返回值,同时还会抛出异常;

3、Future是对Callable任务的执行结果进行取消、查询是否完成、获取结果、设置结果操作。

4、Callable接口带来了灵活的线程使用体验,调用FutureTask的get方法,从而获取call方法的返回值;FutureTask的源码显示,它实现了RunnableFuture接口,而RunnableFuture又继承了Runnable和Future接口。这也解释了为什么FutureTask能够作为Thread构造方法的一个参数,同时又能够通过get方法取得返回值;

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux 中awk命令删除指定字段中特定字符串前边所有内容

001、删除第9个字段gene_id前边的所有内容[b20223040323@admin2 test]$ ls a.txt [b20223040323@admin2 test]$ cat a.txt ## 测试数据 NC_089035.1 Gnomon transcript 7328 15219 . + . transcript_id "rna-XM_015766610.3&quo…

.NET Core 中如何实现缓存的预热?

在构建高性能的 .NET Core 应用时,缓存是提升系统响应速度、减轻数据库压力的利器。然而,缓存并非一蹴而就,它也需要“热身”才能发挥最佳性能。这就是缓存预热的意义所在。 一、什么是缓存预热? 缓存预热,顾名思义,就是在系统启动或缓存失效后,主动将热点数据加载到缓存…

EtherNet/IP转PROFINET网关模块促成罗克韦尔PLC与变频器协议互通

一、案例背景在某新能源汽车电池生产线上,需要将采用EtherNet/IP协议的电池检测设备与采用ProfiNet协议的生产线控制系统进行集成,以实现对电池生产过程的全面监控和数据采集。 二、硬件设备西门子S7-1500 PLC 新能源电池容量测试仪:支持标准的EtherNet/IP协议 捷米特捷米特…

Modbus转PROFINET网关模块让Modbus上位机与电机高效通讯

某汽车零部件制造企业的生产线,其自动化设备来自不同品牌和供应商,如汽车生产线的总控制系统采用Modbus TCP协议,它是整个生产线的主站,而部分生产设备如汇川的伺服电机和欧姆龙的仪表等采用Profinet协议,作为从站,这时候需要Modbus TCP协议设备与Profinet协议设备进行通…

No.52 ES6---Promise对象

一、Promise对象 1.1基本概念Promise 是异步编程的一种解决方案,比传统的解决方案--回调函数和事件----更合理和更强大。 它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了Promise 对象。 所谓 promise,简单说就是一个容器,里面保存着某个未来才会结…

类型转换+变量+常量+作用域

类型转换+变量+常量+作用域强制转换 (类型)变量名 高-->低 自动转化 低-->高 注意点不能对布尔值进行转换 不能把对象类型转换为不相干的类型 在把高容量转换到低容量的时候,强制转换 转换的时候可能存在内存溢出,或者精度问题变量变量作用域常量

ITSM流程落地经验之变更管理

本文来自腾讯蓝鲸智云社区用户: CanWay大多数组织中都实施了变更管理,但是效果参差不齐,尤其在变更管理的核心环节,部分组织因缺乏有效的把控,使得变更管理的效果不尽人意,甚至可能面临失控的风险。为此,我们有必要深入探讨并详细分析变更管理中的关键活动,并通过实例加…

国货国用信创在教育领域的应用

信创,即信息技术应用创新产业,旨在实现信息技术领域的自主可控,减少对国外技术的依赖,保障国家信息安全。在教育领域,国货国用信创的应用正逐渐改变着传统的教育模式,为教育的现代化发展注入新的活力。随着科技的飞速发展,教育领域也面临着数字化转型的迫切需求。信创产…

信创概念十大龙头股的风险与机遇深度剖析

信创,即信息技术应用创新产业,旨在实现信息技术领域的自主可控,减少对国外技术的依赖,保障国家信息安全。近年来,随着国家政策的大力支持和科技发展的需求,信创概念逐渐兴起,相关企业迎来了前所未有的发展机遇。在信创概念板块中,有十大龙头股备受关注,它们在行业中具…

易基因:中农大曾祥芳团队WGBS+ChIP-seq揭示蛋氨酸在母胎免疫耐受和子宫内膜容受中的表观调控机制|Cell Rep

大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。 母胎免疫耐受是指母体免疫系统对胎儿抗原的耐受,避免对胎儿产生免疫排斥反应。子宫内膜容受性是指子宫内膜接受胚胎着床的能力。子宫内膜容受性和母胎免疫耐受是成功妊娠的两个关键过程。然而,营养所涉及的分…

【文章】更新说明

重要 以后文章优先发布于公众号:瓜穷网络安全团队,请大家关注公众号。本文来自博客园,作者:aoaoaoao,转载请注明原文链接:https://www.cnblogs.com/websecyw/p/18764593

牛客题解 | 迷宫寻路

牛客题库题解题目 题目链接 题解 难度:偏难 知识点:BFS 状态压缩 队列 思路: 如果不存在钥匙和锁的情况:(理解BFS过程) (将例子中的小写字母看为1,大写字母看为0)构成数组G[5][5]起始位置G[0][1],因此得到b[0][1]=0【注】辅助数组b[i][j]用来记录从起始位置到坐标(i…