问题求助!

请问各位大神几个问题:
1.为什么存储线程变量用threadlocal不用ConcurrentHashMap
2.线程池当没有任务时,每个线程状态是什么,是wait还是yield,为什么
#Java找工作#
全部评论
第2个问题建议直接看源码,另外线程状态只有:NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED,没有:YIELD; 只是简单看了下源码,可能理解的有些片面,大多数情况下,线程池没有任务,工作线程应该是进入 WAITING 状态。 调用链路如下:work.run() -> runWoker() -> getTask() -> workQueue.take() -> notEmpty.await() -> acquireQueued() -> parkAndCheckInterrupt() -> LockSupport.park() -> 线程进入 WAITING 状态; 涉及到一些 AQS 的知识;
点赞 回复 分享
发布于 2020-04-26 17:41

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务