菜鸟笔记
提升您的技术认知

操作系统笔记

进程,线程,协程与并行,并发进程线程协程的区别死锁进程,线程,多线程i++的线程安全性同步和异步孤儿进程和僵尸进程/proc进程信息linux中的分段和分页互斥量 mutex线程进程间通信进程创建进程优先级进程的基础知识进程与线程的区别(面试题)线程的控制(创建,终止,等待,分离)可重入 VS 线程安全死锁的概念一级缓存和二级缓存的理解一句话解说内存屏障 Memory barrierbrk(), sbrk() 用法详解malloc/free函数的简单实现一文讲透 “进程、线程、协程”Linux进程状态线程池的陷阱linux内核学习之进程和线程进程与线程的区别和联系内存寻址linux IO子系统和文件系统读写流程Page cache和buffer cache的区别与联系漫谈linux文件IO多线程和多进程的区别内存泄漏字节、字、位、比特的概念和关系如何避免死锁ANSI是什么编码?CPU寻址范围(寻址空间)CPU 使用率低高负载的原因创建多少个线程合适操作系统下spinlock锁解析、模拟及损耗分析线程堆栈堆和栈的内存分配堆和栈的概念和区别堆和栈的区别,申请方式,程序的内存分配什么是 POD 数据类型Linux内存分配小结--malloc、brk、mmap系统调用与内存管理(sbrk、brk、mmap、munmap)进程描述和控制CPU执行程序的原理编译的基本概念Linux虚拟地址空间布局一个程序从源代码到可执行程序的过程程序的运行机制——CPU、内存、指令的那些事分页内存管理——虚拟地址到物理地址的转换深刻理解Linux进程间通信fork之后父子进程的内存关系fork之后,子进程继承了父进程哪些内容关于协程及其锁的一些认识对协程的一点理解std::thread join和detach区别CAS和ABA问题CAS算法锁和无锁无锁队列的实现Lock-Free 编程锁开销优化以及CAS进程、线程和协程之间的区别和联系多线程的同步与互斥(互斥锁、条件变量、读写锁、自旋锁、信号量)Linux 原来是这么管理内存的线程上下文切换怎么玩儿进程和线程通信原理CPU密集型 和 IO密集型cas原理以及Atomic原子类分析改变线程状态的八个方法六种进程间通信方式

改变线程状态的八个方法

阅读 : 1001

在说线程的基本方法之前,我们先介绍一下线程的生命周期,也就是线程的几个状态,线程有新建、就绪、运行、阻塞和死亡。

start方法

调用new方法会创建一个线程,这时候的线程处于新建状态,当调用start方法的时候,线程处于就绪状态。

start方法和run方法 的区别在于start方法让新建的线程进入就绪状态,而run方法中是需要执行的线程的代码,当调用run方法的时候,线程就是运行的状态,run方法执行完成后,线程会被终止,CPU对其他线程进行调度。

yield方法

yield方法是让当前线程释放CPU,和其他线程一起竞争时间片,它让运行态的线程进入就绪状态。

sleep方法

sleep方法让线程进入超时等待状态,sleep方法不会释放当前的锁,它属于Thread类

wait方法

wait方法让线程进入等待状态,wait方法被调用后会释放锁,它属于Object类,需要等待notify来进行唤醒,

notify方法

notify方法是唤醒对象监视器等待的线程,有个有多个就随机选择一个。

join方法

join方法是让当前线程进入阻塞状态,等其他线程结束后,当前线程再由阻塞进入就绪状态。一般结果的分步计算可以join来进行操作

setDaemon方法

setDaemon方法定义守护线程,守护线程是jvm级别的

Interrupt方法

interrupt用于线程的中断,调用这个方法不会立即中断,而是根据中断的标识来判断是否改变线程的状态。通过中断标志为安全终止线程。

总结

这篇文章主要介绍了几个改变线程的方法,start方法用于启动线程,yield方法用于让运行的状态变为就绪状态,sleep方法让线程睡眠,不释放锁,wait方法同样让线程处于等待状态,释放锁,通过notify方法来进行唤醒。还有join方法等等