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

做兼职比较好的网站网站开发总结报告

做兼职比较好的网站,网站开发总结报告,推广品牌的方法,品牌形象设计案例网站问题#xff08;1#xff09;自己动手写一个锁需要哪些知识#xff1f;#xff08;2#xff09;自己动手写一个锁到底有多简单#xff1f;#xff08;3#xff09;自己能不能写出来一个完美的锁#xff1f;简介本篇文章的目标一是自己动手写一个锁#xff0c;这个锁的…问题1自己动手写一个锁需要哪些知识2自己动手写一个锁到底有多简单3自己能不能写出来一个完美的锁简介本篇文章的目标一是自己动手写一个锁这个锁的功能很简单能进行正常的加锁、解锁操作。本篇文章的目标二是通过自己动手写一个锁能更好地理解后面章节将要学习的AQS及各种同步器实现的原理。分析自己动手写一个锁需要准备些什么呢首先在上一章学习synchronized的时候我们说过它的实现原理是更改对象头中的MarkWord标记为已加锁或未加锁。但是我们自己是无法修改对象头信息的那么我们可不可以用一个变量来代替呢比如这个变量的值为1的时候就说明已加锁变量值为0的时候就说明未加锁我觉得可行。其次我们要保证多个线程对上面我们定义的变量的争用是可控的所谓可控即同时只能有一个线程把它的值修改为1且当它的值为1的时候其它线程不能再修改它的值这种是不是就是典型的CAS操作所以我们需要使用Unsafe这个类来做CAS操作。然后我们知道在多线程的环境下多个线程对同一个锁的争用肯定只有一个能成功那么其它的线程就要排队所以我们还需要一个队列。最后这些线程排队的时候干嘛呢它们不能再继续执行自己的程序那就只能阻塞了阻塞完了当轮到这个线程的时候还要唤醒所以我们还需要Unsfae这个类来阻塞park和唤醒unpark线程。基于以上四点我们需要的神器大致有一个变量、一个队列、执行CAS/park/unpark的Unsafe类。大概的流程图如下图所示关于Unsafe类的相关讲解请参考彤哥之前发的文章【死磕 java魔法类之Unsafe解析】解决一个变量这个变量只支持同时只有一个线程能把它修改为1所以它修改完了一定要让其它线程可见因此这个变量需要使用volatile来修饰。private CAS这个变量的修改必须是原子操作所以我们需要CAS更新它我们这里使用Unsafe来直接CAS更新int类型的state。当然这个变量如果直接使用AtomicInteger也是可以的不过既然我们学习了更底层的Unsafe类那就应该用浪起来。private 一个队列队列的实现有很多数组、链表都可以我们这里采用链表毕竟链表实现队列相对简单一些不用考虑扩容等问题。这个队列的操作很有特点放元素的时候都是放到尾部且可能是多个线程一起放所以对尾部的操作要CAS更新唤醒一个元素的时候从头部开始但同时只有一个线程在操作即获得了锁的那个线程所以对头部的操作不需要CAS去更新。private 这个队列很简单存储的元素是线程需要有指向下一个待唤醒的节点前一个节点可有可无但是没有实现起来很困难不信学完这篇文章你试试。加锁public 1尝试获取锁成功了就直接返回2未获取到锁就进入队列排队3入队之后再次尝试获取锁4如果不成功就阻塞5如果成功了就把头节点后移一位并清空当前节点的内容且与上一个节点断绝关系6加锁结束解锁// 解锁 1把state改成0这里不需要CAS更新因为现在还在加锁中只有一个线程去更新在这句之后就释放了锁2如果有下一个节点就唤醒它3唤醒之后就会接着走上面lock()方法的while循环再去尝试获取锁4唤醒的线程不是百分之百能获取到锁的因为这里state更新成0的时候就解锁了之后可能就有线程去尝试加锁了。测试上面完整的锁的实现就完了是不是很简单但是它是不是真的可靠呢敢不敢来试试直接上测试代码private 运行这段代码的结果是总是打印出10000000一千万说明我们的锁是正确的、可靠的、完美的。总结1自己动手写一个锁需要做准备一个变量、一个队列、Unsafe类。2原子更新变量为1说明获得锁成功3原子更新变量为1失败说明获得锁失败进入队列排队4更新队列尾节点的时候是多线程竞争的所以要使用原子更新5更新队列头节点的时候只有一个线程不存在竞争所以不需要使用原子更新6队列节点中的前一个节点prev的使用很巧妙没有它将很难实现一个锁只有写过的人才明白不信你试试^^彩蛋1我们实现的锁支持可重入吗答不可重入因为我们每次只把state更新为1。如果要支持可重入也很简单获取锁时检测当前锁是不是当前线程占有着如果是就把state的值加1释放锁时每次减1即可减为0时表示锁已释放。2我们实现的锁是公平锁还是非公平锁答非公平锁因为获取锁的时候我们先尝试了一次这里并不是严格的排队所以是非公平锁。注下一章我们将开始分析传说中的AQS这章是基础请各位老铁务必搞明白。推荐阅读死磕 java魔法类之Unsafe解析死磕 java同步系列之JMMJava Memory Model死磕 java同步系列之volatile解析死磕 java同步系列之synchronized解析欢迎关注我的公众号“彤哥读源码”查看更多源码系列文章, 与彤哥一起畅游源码的海洋。
http://www.pierceye.com/news/245915/

相关文章:

  • 陕西建设 节水 官方网站论坛怎样发帖推广
  • 二合一收款码免费制作网站营销型网站代理
  • 网站建设的技术方案模板淘宝客做网站链接
  • 梅州市网站制作页面简洁的导航网站
  • 绵阳房产网站建设自学广告设计该怎么入手
  • 火星wap建站宏大建设集团有限公司网站
  • 免费搭建业网站西地那非片有延时效果吗
  • 网站制作 手机用c 做的网站怎么打开
  • 常见的企业网站有哪些佛山网站建设优化制作公司
  • 品牌网站建设 蝌蚪5小wordpress 链接修改
  • 江苏省建设通官方网站网站开发全程实例
  • 网络推广和网站推广wordpress主题如何用
  • 多语言网站 自助网站建设的功能有哪些方面
  • mysql 收费 网站建设四川省建筑公司
  • 装修网站横幅怎么做优化方案英语
  • 网站建设数据库实验心得怎么做移动端网站
  • 网站建设开发服务费记账计算机应用技术培训班
  • 广渠路网站建设优易建站终身用沧州响应式网站开发
  • 网站流量统计查询南宁百度seo建议
  • 东莞做网站制作建筑公司图片
  • 浏阳市网站建设登录注册网站怎么做
  • 聊城手机网站建设电话网站开发需要哪些
  • 学做网站要学什么东西wordpress 分页地址
  • 淘宝客网站建设要注意什么windows系统没有wordpress
  • 产看网站权重运维难还是开发难
  • 芜湖中凡网站建设公司中国建设工程招投网站
  • 手机网站开发+图库类13岁开网络科技公司
  • 网站上的产品板块广州展厅设计公司有哪些
  • 网站建设源代码交付网站系统制作教程视频教程
  • 做网站刷赞qq怎么赚钱网站特效js代码