首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

理解Java高级并发工具类LockSupport

LockSupport的原理是,它最多只允许有一个许可证令牌(permit),如果线程可以得到这个令牌,那么他就能继续运行下去,否则将会处于阻塞状态,注意此时对应的线程状态是WAITTING不是BLOCKED...前缀开头的方法,是用来获取许可证的,如果当前线程的许可证令牌存在1个,那么调用park相关方法的线程会立马返回继续执行,同时许可证个数就变成0个,如果再继续调用park方法,那么当前线程就会阻塞处于等待状态(WAITTING...(2)park调用会导致当前的线程处于WAITTING或者WAITTING_TIMED状态,当调用unpark方法时并不会立即进入RUNNABLE状态,而是看当前有没有线程已经占用锁,如果有它们会先变成...BLOCKED状态,然后在变成RUNNABLE状态 (3)WAITTING与BLOCKED状态的区别,简单的理解WAITTING一般需要有人通知才能唤醒,而BLOCKED通常是只要对象的锁没人占用就可以继续运行

74920
您找到你想要的搜索结果了吗?
是的
没有找到

jvm源码解析(三)线程状态

更加轻量化,也因此被成为轻量化的进程 线程一般会作为并发编程的起始问题,用于引出更多的并发编程面试问题 二、主要问题 线程的状态有哪些 thread.getState(); // 获取线程状态 有些书上Waitting...BLOCKED:阻塞等待锁的线程状态 表示线程处于阻塞状态,正在等待监视器锁 synchronized代码块或synchronized标记的方法 解决方法:等待执有锁的线程释放锁,并获取到锁后继续执行 WAITTING...Thread.join()、LockSupport.park() 解决方法:主线程notify()或者notifyAll()方法/主线程执行完/LockSupport.unpark(thread) TIMED_WAITTING...:计时等待状态 和WAITTING类似,只是设置了超时时间 解决方法:调用有超时时间设置的方法Thread.sleep(long)、Object.wait(long)、Thread.join(long...线程是如何工作的 new->start()->run方法中有synchronized,并有线程持有锁则等待,否则执行->遇到上述的BLOCK方法,则等待对应的解决方法->执行-Dead BLOCKED和WAITTING

61320

(二)Java线程与系统线程,生命周期

初始状态,线程刚被构建,但是还没有调用start()方法 RUNNABLE 运行状态,Java系统系统中将操作系统中的可运行状态和运行状态统称为RUNNABLE BLOCKED 阻塞状态,表示线程阻塞于锁 WAITTING...等待状态,表示线程进入等待状态,进入该状态表示当前线程做出一些特定动作(通知或者中断) TIME_WAITTING 超时等待状态,该状态不同于等待状态,它可以在指定的时间后自行返回 TERMINATED...等待阻塞:运行(running)的线程执行o.wait()方法,JVM会把该线程放入等待队列(waitting queue)中,通过调用motify()方法回到就绪状态。 (二)....有三种方法可以导致线程处于WAITTING状态: object.wait() thread.join() LockSupport.park() TIMED_WAITING TIMED_WAITING状态表示在一个有限的时间内等待其他线程执行特定的某些操作...timeout, int nanos) thread.join(long millis) LockSupport.parkNanos LockSupport.parkUntil TIMED_WAITING和WAITTING

40310
领券