Java多线程编程实战指南 核心篇 总结-1

1. 多线程的三种实现及java多线程的实现

详解见:

https://blog.csdn.net/nalanmingdian/article/details/77748326

java 使用用户线程加轻量级进程混合实现,且采用1对1模型,其中兼顾实现复杂度及跨平台性。

由于仅使用用户线程,则线程相关的调度、切换即CPU映射等复杂操作都需要考虑所以在java 1.2 后就不在使用了,

而使用用户线程加轻量级进程混合实现,可以使java 开发者仅关注用户线程内的逻辑处理,对于与轻量级进程相关的系统调用,线程上下文切换等则可以都交由JVM处理,这样可以很好的兼顾实现复杂度及跨平台性,所以java最终没有选择直接暴露内核级线程的接口轻量级进程(LWP),而是暴露一个java线程对象。

2.线程的创建、启动、执行和结束

线程的创建:

两种创建方式:1. 继承Thread类,作为Thread子类  2.创建Runnable接口实例,通过实例创建线程类。

从面向对象的角度看:第一种属于继承方式,第二种属于组合方式,推荐第二中,耦合性更低。

从对象共享角度看:第二种可以多个线程共享一个Runnable实例,实现多线程并发处理。

线程的启动:

Thread类的start方法会触发线程的启动,不仅仅是java线程的启动,同时还会触发与java线程中对应的宿主机上线程的启动,所以创建java线程对象的代价更高。

start方法调用结束并不意味着相应的线程已经开始运行,仅仅是线程准备就绪,何时运行由线程调度器决定。

线程的执行:

Thread类的run方法执行具体的线程逻辑,而且此方法总是由java虚拟机直接调用。

如果java代码直接调用run方法则代码并不是在新创建的线程上执行,而是在调用方所在的线程上执行,相当于简单的java方法调用。

线程的结束

run方法执行完毕,线程运行结束,运行结束的线程所占用的资源(如内存空间)会如同其他Java对象一样被JVM虚拟机垃圾回收

3. 线程饥饿:

某些线程永远得不到运行机会,可能由于优先级使用不当导致内核线程调度器一直不调度此线程。

4.守护线程和用户线程

用户线程:用户线程会阻塞java进程的正常终止,即一个java进程中,只有所有的用户线程都终止,java进程才能正常终止。

守护线程:守护线程不会阻塞java进程的正常终止,即一个java进程中,活跃的线程只是守护线程,java进程能正常终止。

5.线程的生命周期状态

详解见:

https://blog.csdn.net/nalanmingdian/article/details/77748326

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值