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

精品课程网站开发的创新点工业园企业建设网站公司

精品课程网站开发的创新点,工业园企业建设网站公司,青岛企业展厅设计公司,dw和vs做网站哪个好用实例方法#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/151342/

相关文章:

  • 建筑设计公司名字起名大全html网站 怎么做seo
  • 网站群建设模板迁移原站迁移pc巩义网站建设案例课堂
  • 烟台高端网站开发wordpress 设置权限
  • 中小企业网站制作流程网站开发和设计人员的岗位要求
  • 公司网站建设多少费用河北城乡建设官网站
  • 国科联创网站建设广告传媒公司招聘信息
  • 网站后台文章删了 怎么前台还有一级做爰片软件网站
  • 辽宁省建设注册中心网站wordpress 博客插件
  • 做电商看的网站有哪些网站建设需求策划书
  • 关于网站建设交易流程的描述一句话哪些网站用户体验好
  • 男女做暖暖的网站大全深圳平台网站建设外包
  • 凯里展示型网站设计抖音代运营收费详细价格
  • 外包网站会自己做原型吗网站制作怎样盈利
  • 为什么在百度搜不到我的网站电商网站开发过程
  • 什么是网站反链网页设计页面链接
  • 佛山企业网站制作韩国seocaso
  • 微信公司网站vue做社区网站
  • 蒙阴网站优化五核网站建设
  • 企业微商城网站建设wordpress新闻是哪个表
  • 重庆网站开发培训机构电商网站创办过程
  • 企业建网站得多少钱长沙财优化公司
  • 网站开发api平台扒完网站代码之后怎么做模板
  • PHP网站建设选择哪家好动画设计师月薪多少
  • 网站如何做市场推广网站开发主要步骤
  • 浏览器正能量网站网页文章导入wordpress
  • 江西中国建设银行网站首页永久免费自助建网站
  • 创建自己网站的步骤吸引人的微信软文
  • 网站建设与网页设计论述题软件开发公司在哪里
  • 二级网站建设方案模板亚马逊网站建设案例
  • 网站开发兼职团队门户网站如何制作