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

网站管理助手 二级域名自助建站和网站开发的利弊

网站管理助手 二级域名,自助建站和网站开发的利弊,老黄代码,创建网站要申请域名吗#x1f4dd;个人主页#xff1a;五敷有你 #x1f525;系列专栏#xff1a;并发编程 ⛺️稳中求进#xff0c;晒太阳 1. 概述 全称是 AbstractQueuedSynchronizer#xff0c;是阻塞式锁和相关的同步器工具的框架 特点#xff1a; 用 state 属性来表示资源的状… 个人主页五敷有你       系列专栏并发编程 ⛺️稳中求进晒太阳 1. 概述 全称是 AbstractQueuedSynchronizer是阻塞式锁和相关的同步器工具的框架 特点 用 state 属性来表示资源的状态分独占模式和共享模式子类需要定义如何维护这个状态控制如何获取锁和释放锁 getState - 获取 state 状态setState - 设置 state 状态compareAndSetState - cas 机制设置 state 状态独占模式是只有一个线程能够访问资源而共享模式可以允许多个线程访问资源提供了基于 FIFO 的等待队列类似于 Monitor 的 EntryList条件变量来实现等待、唤醒机制支持多个条件变量类似于 Monitor 的 WaitSet 子类主要实现这样一些方法默认抛出 UnsupportedOperationException tryAcquiretryReleasetryAcquireSharedtryReleaseSharedisHeldExclusively 获取锁的姿势 // 如果获取锁失败 if (!tryAcquire(arg)) { // 入队, 可以选择阻塞当前线程 park unpark } 释放锁的姿势 // 如果释放锁成功 if (tryRelease(arg)) { // 让阻塞线程恢复运行 } 2. 实现不可重入锁 自定义同步器 //同步器类 class MySync extends AbstractQueuedSynchronizer {Overrideprotected boolean tryAcquire(int arg) {if (compareAndSetState(0,1)) {setExclusiveOwnerThread(Thread.currentThread());return true;}return false;}Overrideprotected boolean tryRelease(int arg) {setExclusiveOwnerThread(null);setState(0);return true;}Override //是否持有独占锁protected boolean isHeldExclusively() {if(getExclusiveOwnerThread()!null){return true;}return false;}public Condition newCondition(){return new ConditionObject();}} 自定义锁 有了自定义同步器很容易复用 AQS 实现一个功能完备的自定义锁 public class MyLock implements Lock {MySync mySyncnew MySync();Override //加锁不成功进入等待队列等待 public void lock() {mySync.acquire(1);}Override //加锁可以被打断 public void lockInterruptibly() throws InterruptedException {mySync.acquireInterruptibly(1); }Override //尝试加锁一次 public boolean tryLock() {mySync.tryAcquire(1);return true; }Override //尝试加锁带超时时间 public boolean tryLock(long time, TimeUnit unit) throws InterruptedException {mySync.tryAcquireNanos(1,unit.toNanos(time));return true; }Override //解锁 public void unlock() {mySync.release(1); }Override //创建条件变量 public Condition newCondition() {return mySync.newCondition(); }} 测试一下 public static void main(String[] args) {Lock myLocknew MyLock();new Thread(()-{myLock.lock();try {System.out.println(locking...);Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}finally {System.out.println(unlock...);myLock.unlock();}},t1).start();new Thread(()-{myLock.lock();try {System.out.println(加锁...);}finally {System.out.println(解锁...);myLock.unlock();}},t2).start();} 心得 起源 早期程序员会自己通过一种同步器去实现另一种相近的同步器例如用可重入锁去实现信号量或反之。这显然不够优雅于是在 JSR166java 规范提案中创建了 AQS提供了这种通用的同步器机制。 目标 AQS 要实现的功能目标 阻塞版本获取锁 acquire 和非阻塞的版本尝试获取锁 tryAcquire获取锁超时机制通过打断取消机制独占机制及共享机制条件不满足时的等待机制 设计 AQS 的基本思想其实很简单 获取锁的逻辑 while(state 状态不允许获取) {if(队列中还没有此线程) { 入队并阻塞 }}当前线程出队 释放锁的逻辑 if(state 状态允许了) {恢复阻塞的线程(s)} 要点 原子维护 state 状态阻塞及恢复线程维护队列 1) state 设计 state 使用 volatile 配合 cas 保证其修改时的原子性state 使用了 32bit int 来维护同步状态因为当时使用 long 在很多平台下测试的结果并不理想 2) 阻塞恢复设计 早期的控制线程暂停和恢复的 api 有 suspend 和 resume但它们是不可用的因为如果先调用的 resume那么 suspend 将感知不到解决方法是使用 park unpark 来实现线程的暂停和恢复具体原理在之前讲过了先 unpark 再 park 也没问题park unpark 是针对线程的而不是针对同步器的因此控制粒度更为精细park 线程还可以通过 interrupt 打断 3) 队列设计 使用了 FIFO 先入先出队列并不支持优先级队列设计时借鉴了 CLH 队列它是一种单向无锁队列 主要用到AQS的并发工具类
http://www.hkea.cn/news/14554937/

相关文章:

  • 怎样修改公司网站内容百度深圳总部
  • 龙岩网站建设要多少费用做好网站建设的重要性
  • 介绍小说的网站模板下载地址广西大兴建设有限公司网站
  • 哈尔滨网站建设30t高校网站群管理系统
  • 企业网站建设 新天地网络O2O网站建设需要多少钱
  • 网站开发动态新闻发布网站如果做
  • 美食网站建设服务策划书做优化网站哪个公司好
  • 多元网站建设信息网站的建设
  • 个性化定制网站有哪些集团公司中英文网站模板
  • 什么软件能看网站?企业网站维护
  • 专题类的网站做搜狗网站优化排名
  • 怎么注销建设银行网站用户产品经理兼职做网站报酬
  • 莆田网站建设方案优化网站程序h5
  • 晋中市建设局网站群晖wordpress连接外网教程
  • 做儿童方面的网站网络有哪些广告推广方式
  • 佛山网站设计建设建设一个小说网站
  • 网站重新设计需要多久医疗app开发需要多少费用
  • 建设企业网站个人网上北京装修公司前十名有哪些
  • 国家示范院校建设网站网络营销软文范例
  • 电子商务网站建设方案书江门网页制作公司
  • 网站运营问题口碑营销方案怎么写
  • 网站 维护费用项目经理网站开发流程
  • 电子商务网站软件平台wordpress 08影院模板
  • 杭州网站建设出名上海正规招聘人才市场
  • 湖南seo优化公司石家庄seo网站排名
  • 网站备案完成后接下来怎么做建筑公司企业标语
  • 金华市网站建设公司营销网点是什么意思
  • 怎么将自己做的网站放到网上百度seo推广方案
  • 建什么网站做cpa中国风 wordpress主题
  • 甜品网站策划与建设上海网站设计费用