查看“【面试:Java并发】”的源代码
←
【面试:Java并发】
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
[[category:面试]] === sleep() 和 wait()、wait(n) 的区别? === # '''sleep()''': 是 '''Thread''' 类的'''静态方法''',当前线程将睡眠 n 毫秒,线程进入阻塞状态。 #* 当睡眠时间到了,会解除阻塞,进行可运行状态,等待 CPU 的到来。 #* sleep 不释放锁(如果有的话); # '''wait()''': 是 '''Object''' 的方法,必须与 '''synchronized''' 关键字一起使用,线程进入阻塞状态。 #* 当 notify 或者 notifyall 被调用后,会解除阻塞。但是,只有重新占用互斥锁之后才会进入可运行状态。 #* wait 会释放互斥锁。 === synchronized 关键字<ref name="锁">参见:[[锁]]</ref> === synchronized 底层实现:【monitor 机制】 进入时,执行 '''monitorenter''',将计数器 +1,释放锁 '''monitorexit''' 时,计数器-1; 当一个线程判断到计数器为 0 时,则当前锁空闲,可以占用;反之,当前线程进入等待状态。 Synchronized 是在加锁,加'''对象锁'''。 * 对象锁是一种重量锁(monitor)。 * 该关键字是一个几种锁的封装。synchronized 的锁机制会根据线程竞争情况在运行时会有'''偏向锁'''(单一线程)、'''轻量锁'''(多个线程访问 synchronized 区域)、'''对象锁'''(重量锁,多个线程存在竞争的情况)、'''自旋锁'''等。 === volatile 关键字<ref name="锁"/><ref >参见:[[深入理解JVM:Java内存模型与线程#对于volatile型变量的特殊规则]]</ref> === == 参考 == <references />
返回至“
【面试:Java并发】
”。
导航菜单
个人工具
登录
命名空间
页面
讨论
大陆简体
已展开
已折叠
查看
阅读
查看源代码
查看历史
更多
已展开
已折叠
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
笔记
服务器
数据库
后端
前端
工具
《To do list》
日常
阅读
电影
摄影
其他
Software
Windows
WIKIOE
所有分类
所有页面
侧边栏
站点日志
工具
链入页面
相关更改
特殊页面
页面信息