当前位置: 首页 > news >正文

武昌做网站的公司青岛人社通app下载最新版

武昌做网站的公司,青岛人社通app下载最新版,域名怎么起,岳阳seo公司咨询23火星实例方法#xff1a; interrupt()方法是设置结束阻塞(sleep、)#xff0c;并且设置中断标记true isInterrupted()判断当前是否中断 静态方法#xff1a; Thread.interrupted():调用这个方法的线程中断标记位还原为false 那么好#xff0c;既然上面的方法作用是清晰的 interrupt()方法是设置结束阻塞(sleep、)并且设置中断标记true isInterrupted()判断当前是否中断 静态方法 Thread.interrupted():调用这个方法的线程中断标记位还原为false 那么好既然上面的方法作用是清晰的尝试启动个线程进行操作: 一.疑惑1为什么如下代码调用后会出现false Slf4j public class InterruptTest {public static void main(String[] args) {Thread t1 new Thread(() - {try {Thread.currentThread().sleep(5000);} catch (InterruptedException e) {log.info(中断状态1:{}, Thread.currentThread().isInterrupted());}});t1.start();try {Thread.sleep(2000); // 等待2秒确保主线程调用t1线程interrupt时t1是启动好的} catch (InterruptedException e) {e.printStackTrace();}t1.interrupt();} } 输出结果 InterruptTest - 中断状态1:false 不是说线程实例方法interrupt()调用后会设置中断标记嘛为什么是false 解答当 InterruptedException 被抛出时JVM 会自动清除当前线程的中断标志。 它清除中断标志是为了避免开发者不小心忽略异常后线程还带着一个“脏标志”继续运行导致逻辑混乱真是贴心的很。 一.疑惑2既然JVM自动清理标记再调用interrupt()总可以看到true了吧 public static void main(String[] args) {Thread t1 new Thread(() - {try {Thread.currentThread().sleep(5000);} catch (InterruptedException e) {log.info(中断状态1:{}, Thread.currentThread().isInterrupted());Thread.currentThread().interrupt();log.info(中断状态2:{}, Thread.currentThread().isInterrupted());Thread.interrupted();log.info(中断状态3:{}, Thread.currentThread().isInterrupted());}});t1.start();try {Thread.sleep(2000); // 等待2秒确保主线程调用t1线程interrupt时t1是启动好的} catch (InterruptedException e) {e.printStackTrace();}t1.interrupt();} 运行结果果然出现了true thread.InterruptTest2 - 中断状态1:false thread.InterruptTest2 - 中断状态2:true thread.InterruptTest2 - 中断状态3:false thread.cpp下的interrupt函数(807行是调用操作系统的逻辑) 继续跟进到os_linux.cpp也可以分系统选看我直接选Linux的了 如果线程不是阻塞状态例如未在 sleep()、park() 或 wait() 等阻塞点这段代码的效果仅仅是改了中断标志位其他操作如 unpark() 唤醒线程不会有实际作用也不会耽误线程继续运行。 thread.cpp的is_interrupted函数 同样溯源到os_linux.cpp 一.疑惑3wait、notify-all为什么都要加同一个synchronized 阅读Object相关源码objectMonitor.cpp wait函数 尾插法放入队列  _WaitSetLock 是一个自旋锁用于保护 WaitSet 的并发访问在objectMonitor.hpp中 也就是WAIT/TIME WAIT本质上是用一个Object中的等待队列去存储需要等待的线程对象每一个Object对象都可以充当这个角色获取这个对象的waitset才能把Thread放入唤醒相当于再从这个waitset中把线程剔除来再唤醒这也就是为什么wait notify/all 方法需要synchronized同一个对象了 再来看一下notify函数(出一个线程对象然后唤醒) 上图表明从头部出队列 也就是说插入顺序是:_WAIT_SET 1 2 3 4 5获取顺序也是1 2 3 4 5符合FIFO队列先进先出 再来看一下notifyAll函数(全部唤醒) 由于迭代器用的还是DequeueWaiter所以这个仍然是顺序出队列并不是随机的
http://www.w-s-a.com/news/591528/

相关文章:

  • 陇西网站建设 室内设计持啊传媒企业推广
  • 连云港做网站制作首选公司如何让单位网站做防护
  • wordpress企业网站源码开发网站用什么工具做设计
  • 网站负责人不是法人seo神马网站推广器
  • 网站建设绩效考核方案wordpress支付宝付款
  • 高要区住房和城乡建设局网站如何网上注销自己的公司
  • 哪种技术做网站容易论文答辩图片做记录片的是哪个网站
  • 怎样在微信中做网站网站的备案号在哪
  • 返利淘网站怎么做wordpress htnl短代码
  • 网站 手机 appwordpress管理账户
  • 徐州网站建设 网站制作做招商网站的前景怎么样
  • 网站开发就业岗位鹧鸪哨网站1v1深度开发
  • 在线手机动画网站模板网站登录注册怎么做
  • 苏州品牌网站设计晋江论坛兔区是什么
  • 怎么利用代码做网站重庆网络营销网站建设销售
  • 用dw怎么做网站留言板百度举报网站
  • 成都微网站设计企业为什么要做网络营销推广
  • 双桥区网站制作企业网站一般内容包括哪些
  • 莆田外贸专业建站做app 需要先做网站吗
  • 网站怎么用北京口碑最好的装修公司
  • 潮州网站建设深圳微信分销网站设计
  • asp.net网站开发实例教程pdf泉州seo网站关键词优推广
  • 怎样建立一个企业网站dede 网站名称
  • 做网上竞彩网站合法吗免费网站建设品牌
  • 网站开发所需要的的环境客户关系管理的内涵
  • 优质做网站公司做软件的人叫什么
  • 徐州市徐州市城乡建设局网站首页网站建设刂金手指下拉十五
  • 建设游戏网站目的及其定位市场营销策略概念
  • 小学电教检查网站建设资料wordpress谷歌字体
  • 南通做网站的公司有哪些中国建筑论坛网