博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
线程--概念
阅读量:6030 次
发布时间:2019-06-20

本文共 861 字,大约阅读时间需要 2 分钟。

1. 首先是线程的sleep和yeld

sleep会阻塞当前线程,使所有优先级的线程都可以获取执行机会,但并不释放当前线程已经获得的锁

yeld,线程回到可执行状态,同优先级的线程才可获取执行机会,不释锁

还有两个经常放一块对比:

  • wait,它释放已经占有的锁,等待唤醒,notify唤醒后进入锁池等待获取锁标记,获取后变为可执行状态等待cpu调度执行
  • join,当前线程0获取另一个线程1对象的对象锁(synchronized),如果线程活着就wait(),直到线程结束(自动notify)

    join(1000)并不能真实表现当前线程等待1000毫秒,解释下,调用join(1000)后,

    线程0还没有获取线程1对象锁(synchronized等待中),如果有其它线程3获得线程1对象锁,线程0就阻塞在synchronized,要等待线程3释放线程1的synchronized后线程0才能进入线程1的synchronized

2. 线程状态

public enum State {    //线程刚创建    NEW,     //start,在JVM中正在运行的线程    RUNNABLE,     //线程处于阻塞状态,等待监视锁,可以重新进行同步代码块中执行    BLOCKED,     //调用join() wait()方法     WAITING,     //调用sleep(时间) join(时间) wait(时间)方法    TIMED_WAITING,     //线程执行完毕,已经退出     TERMINATED; }

PS:blocked和waiting状态的区别主要是blocked只发生在要进入synchronized临界区时(排除reentrantlock.lock),waiting状态是进入临界区,拿到锁后调用wait等方法进入的状态

 

 

 

 参考文章:

1. 

2. 

3. 

4. 

 

转载于:https://www.cnblogs.com/yhzh/p/5888878.html

你可能感兴趣的文章
HTML<div><span>字符实体
查看>>
CentOS6.3安装PowerVault MD Storage Manager
查看>>
HTML 表格
查看>>
VMware 虚拟化编程(7) — VixDiskLib 虚拟磁盘库详解之三
查看>>
php 未实例化类调用方法的问题
查看>>
Anaconda jupyter notebook 出现 kernel error 解决办法
查看>>
T-SQL游标
查看>>
我对读计算机软件专业硕士的几点看法
查看>>
linux中Dcumentation目录下的basic_profiling.txt文档翻译
查看>>
特征工程
查看>>
第四次冲刺
查看>>
【枚举】bzoj1800 [Ahoi2009]fly 飞行棋
查看>>
用JS写CSS
查看>>
TOJ4537: n阶行列式
查看>>
PBM文件格式
查看>>
算法刷题笔记-stack-四则运算
查看>>
3.16
查看>>
Linux下arp用法
查看>>
表单文件上传与文件下载
查看>>
jquery 中prop()的使用方法
查看>>