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

大型网站怎么做淘宝客怎么在微博做网站

大型网站怎么做,淘宝客怎么在微博做网站,建筑公司网站领导致辞,婚庆公司赚钱吗一、为什么要出现读写锁 synchronized和ReentrantLock都是互斥锁。 如果说有一个操作是读多写少的#xff0c;还要保证线程安全的话。如果采用上述的两种互斥锁#xff0c;效率方面很定是很低的。 在这种情况下#xff0c;咱们就可以使用ReentrantReadWriteLock读写锁去实现…一、为什么要出现读写锁 synchronized和ReentrantLock都是互斥锁。 如果说有一个操作是读多写少的还要保证线程安全的话。如果采用上述的两种互斥锁效率方面很定是很低的。 在这种情况下咱们就可以使用ReentrantReadWriteLock读写锁去实现。 读读之间是不互斥的可以读和读操作并发执行。 但是如果涉及到了写操作那么还得是互斥的操作。 static ReentrantReadWriteLock lock new ReentrantReadWriteLock(); static ReentrantReadWriteLock.WriteLock writeLock lock.writeLock(); static ReentrantReadWriteLock.ReadLock readLock lock.readLock(); public static void main(String[] args) throws InterruptedException { new Thread(() - { readLock.lock(); try { System.out.println(子线程); try { Thread.sleep(500000); } catch (InterruptedException e) { e.printStackTrace(); } } finally { readLock.unlock(); } }).start();Thread.sleep(1000); writeLock.lock(); try { System.out.println(主线程); } finally { writeLock.unlock(); } } 二、读写锁的实现原理 ReentrantReadWriteLock还是基于AQS实现的还是对state进行操作拿到锁资源就去干活如果没有拿到依然去AQS队列中排队。 读锁操作基于state的高16位进行操作。 写锁操作基于state的低16为进行操作。 ReentrantReadWriteLock依然是可重入锁。 写锁重入读写锁中的写锁的重入方式基本和ReentrantLock一致没有什么区别依然是state进行1操作即可只要确认持有锁资源的线程是当前写锁线程即可。只不过之前ReentrantLock的重入次数是state的正数取值范围但是读写锁中写锁范围就变小了。 读锁重入因为读锁是共享锁。读锁在获取锁资源操作时是要对state的高16位进行 1操作。因为读锁是共享锁所以同一时间会有多个读线程持有读锁资源。这样一来多个读操作在持有读锁时无法确认每个线程读锁重入的次数。为了去记录读锁重入的次数每个读操作的线程都会有一个ThreadLocal记录锁重入的次数。 写锁的饥饿问题读锁是共享锁当有线程持有读锁资源时再来一个线程想要获取读锁直接对state修改即可。在读锁资源先被占用后来了一个写锁资源此时大量的需要获取读锁的线程来请求锁资源如果可以绕过写锁直接拿资源会造成写锁长时间无法获取到写锁资源。 读锁在拿到锁资源后如果再有读线程需要获取读锁资源需要去AQS队列排队。如果队列的前面需要写锁资源的线程那么后续读线程是无法拿到锁资源的。持有读锁的线程只会让写锁线程之前的读线程拿到锁资源。 三、写锁分析 3.1 写锁加锁流程概述 3.2 写锁加锁源码分析 写锁加锁流程 // 写锁加锁的入口 public void lock() { sync.acquire(1); } // 阿巴阿巴 public final void acquire(int arg) { if (!tryAcquire(arg) acquireQueued(addWaiter(Node.EXCLUSIVE), arg))selfInterrupt(); } // 读写锁的写锁实现tryAcquire protected final boolean tryAcquire(int acquires) { // 拿到当前线程 Thread current Thread.currentThread(); // 拿到state的值 int c getState(); // 得到state低16位的值 int w exclusiveCount(c); // 判断是否有线程持有着锁资源 if (c ! 0) { // 当前没有线程持有写锁读写互斥告辞。 // 有线程持有写锁持有写锁的线程不是当前线程不是锁重入告辞。 if (w 0 || current ! getExclusiveOwnerThread()) return false; // 当前线程持有写锁。 锁重入。 if (w exclusiveCount(acquires) MAX_COUNT) throw new Error(Maximum lock count exceeded); // 没有超过锁重入的次数正常 1 setState(c acquires); return true; } // 尝试获取锁资源 if (writerShouldBlock() || // CAS拿锁!compareAndSetState(c, c acquires)) return false; // 拿锁成功设置占有互斥锁的线程 setExclusiveOwnerThread(current); // 返回true return true; } // // 这个方法是将state的低16位的值拿到 int w exclusiveCount(c); state ((1 16) - 1) 00000000 00000000 00000000 00000001 1 00000000 00000001 00000000 00000000 1 16 00000000 00000000 11111111 11111111 (1 16) - 1 运算一个为0必然为0都为1才为1 // // writerShouldBlock方法查看公平锁和非公平锁的效果 // 非公平锁直接返回false执行CAS尝试获取锁资源 // 公平锁需要查看是否有排队的如果有排队的我是否是head的next 3.3 写锁释放锁流程概述释放锁源码 释放的流程和ReentrantLock一致只是在判断释放是否干净时判断低16位的值 // 写锁释放锁的tryRelease方法 protected final boolean tryRelease(int releases) { // 判断当前持有写锁的线程是否是当前线程 if (!isHeldExclusively()) throw new IllegalMonitorStateException(); // 获取state - 1 int nextc getState() - releases; // 判断低16位结果是否为0如果为0free设置为true boolean free exclusiveCount(nextc) 0; if (free) // 将持有锁的线程设置为null setExclusiveOwnerThread(null); // 设置给state setState(nextc); // 释放干净返回true。 写锁有冲入这里需要返回false不去释放排队的Node return free; }
http://www.huolong8.cn/news/31090/

相关文章:

  • 建设网上商城网站首页设计公司
  • 简单网站开发娄底网站设计
  • 在线制作二维码网站使用框架开发wordpress
  • 深圳最好的网站制作哪家公司好微网站下载资料怎么做
  • 做搜狗网站优化首网站开发一个月
  • 网站集约化建设力度产教融合信息门户网站建设方案
  • 做网站要钱么wordpress国内最流行的主题
  • 备案网站注意事项重庆小程序制作
  • 大众点评网站团购怎么做广西南宁云尚网络科技有限公司
  • 个人网站模板html代码上海人才网官网招聘人力资源专业
  • 南昌网站开发建设营销型网站策划公司
  • 货代找客户的网站商务网站信息审核的重要性在于
  • 做网站电脑开一天用多少钱做网站需要多少钱 百度
  • 公司网站开发费用兴田德润官方网站简单网站设计
  • 什么网站可以做数据图门户网站开发 项目实施方案
  • 网站建设中的定位设想厂家网站怎么做
  • 松江网站设计医院网站前置审批文件
  • 网站建设制作多少钱网站开发费用计入什么二级科目
  • app网站开发定制可以做淘宝推广的网站有哪些内容
  • 怎样注册一个网站做电商手机网站 空间
  • 明年做哪个网站致富网站建设费往什么科目
  • 将网站制作成app校园网站建设需要数据库吗
  • 沈阳专业网站建设公司排名开发公司回迁房视同销售会计处理
  • 北京顺义做网站app公司管理
  • 工艺品网站建设怎么注册自己的微信小程序
  • 免费做网站收录的计算机企业网站建设论文
  • 京东商城网站域名做淘宝主要看哪些网站
  • 做电子商务网站需要学什么开发网站报价方案
  • 哪个网站做的w7系统好网站开发 技术架构
  • 网站功能配置wordpress企业类模板下载