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

阿里云Windows网站建设wordpress升级后编辑器没有

阿里云Windows网站建设,wordpress升级后编辑器没有,河北邯郸特产,加速乐wordpress插件一、ReentranLock ReentranLock属于JUC并发工具包下的类#xff0c;相当于 synchronized具备如下特点 ● 可中断 ● 可以设置超时时间 ● 可以设置为公平锁#xff08;防止线程出现饥饿的情况#xff09; ● 支持多个条件变量 与 synchronized一样#xff0c;都支持可重…一、ReentranLock ReentranLock属于JUC并发工具包下的类相当于 synchronized具备如下特点 ● 可中断 ● 可以设置超时时间 ● 可以设置为公平锁防止线程出现饥饿的情况 ● 支持多个条件变量 与 synchronized一样都支持可重入 基本语法synchronized在关键字级别保护临界区 reentrantLock是在对象的级别来保护临界区 // 获取锁 reentrantLock.lock(); try {// 临界区 } finally {// 释放锁无论是否出现异常均会将锁释放reentrantLock.unlock(); }lock()与unlock()是成对出现的 1.1 可重入 可重入是指同一个线程对象如果首次获得这把锁那么因为它是这把锁的拥有者因此有权利再次获取这把锁 如果是不可重入锁那么第二次获得锁时自身也会被锁挡住 import lombok.extern.slf4j.Slf4j; import java.util.concurrent.locks.ReentrantLock;Slf4j(topic c.Test) public class Test {// 创建锁重入对象private static ReentrantLock lock new ReentrantLock();public static void main(String[] args) throws InterruptedException {// 加锁lock.lock();try {log.debug(enter main);m1();} finally {// 解锁lock.unlock();}}public static void m1() {// 加锁lock.lock();try {log.debug(enter m1);m2();} finally {// 解锁lock.unlock();}}public static void m2() {// 加锁lock.lock();try {log.debug(enter m2);} finally {// 解锁lock.unlock();}} }运行结果锁重入成功 1.2 可打断——lockInterruptibly 在等待锁的过程中其他线程可以用interruput方法终止等待 import cn.itcast.n2.util.Sleeper; import lombok.extern.slf4j.Slf4j; import java.util.concurrent.locks.ReentrantLock;Slf4j(topic c.Test) public class Test {// 创建锁重入对象private static ReentrantLock lock new ReentrantLock();public static void main(String[] args) {Thread t1new Thread(()-{try {// 尝试获取锁但可以被打断(如果没有别的线程竞争锁,此方法就会获取lock对象上的锁)/*若有竞争进入阻塞队列等待*/log.debug(尝试获得锁);lock.lockInterruptibly();} catch (InterruptedException e) {e.printStackTrace();log.debug(没有获取锁,返回);return;}try {log.debug(获取到锁);}finally {// 将锁释放掉lock.unlock();}},t1);// 主线程先对其进行加锁后t1线程才启动lock.lock();t1.start();// 主线程睡眠1s后打断t1Sleeper.sleep(1);t1.interrupt();} }运行结果成功打断t1线程 1.3 锁超时 锁超时在获取锁的过程中如果其他线程持有锁一直未释放去尝试获取锁的线程也不会死等而是等待一段时间若这段时间超过对方仍未释放锁则放弃等待获取锁失败 可打断属于一种被动的避免无限等待死等方式而锁超时以主动的方式避免死等 1、无其他线程竞争锁 import lombok.extern.slf4j.Slf4j; import java.util.concurrent.locks.ReentrantLock;Slf4j(topic c.Test) public class Test {// 创建锁重入对象private static ReentrantLock lock new ReentrantLock();public static void main(String[] args) {Thread t1 new Thread(() - {log.debug(尝试获得锁);// 尝试获取锁,返回值为布尔型 【成功获取锁 失败不可获得锁,不会进入阻塞队列等待】if (!lock.tryLock()) { //失败则立刻返回没有任何等待时间log.debug(获取锁失败); // falsereturn;}try {// 执行临界区代码log.debug(成功获取锁);} finally {lock.unlock(); // 释放锁}});} }运行结果 2、存在其他线程竞争立刻结束 import lombok.extern.slf4j.Slf4j; import java.util.concurrent.locks.ReentrantLock;Slf4j(topic c.Test) public class Test {// 创建锁重入对象private static ReentrantLock lock new ReentrantLock();public static void main(String[] args) {Thread t1 new Thread(() - {log.debug(尝试获得锁);// 尝试获取锁,返回值为布尔型 【成功获取锁 失败不可获得锁,不会进入阻塞队列等待】if (!lock.tryLock()) {log.debug(获取锁失败); // falsereturn;}try {// 执行临界区代码log.debug(成功获取锁);} finally {lock.unlock(); // 释放锁}});// 主线程先对lock对象加锁lock.lock();log.debug(成功获取锁);t1.start();} }运行结果 3、存在其他线程竞争等待一段时间尝试等待1s1s内若主线程还未释放锁再结束 哲学家就餐问题便可以使用tryLock()解决 1.4 公平锁 ReentrantLock 默认是不公平的。当一个线程持有锁其他线程就会进入阻塞队列等待当锁的持有者释放锁时阻塞队列中等待的线程会一拥而上谁先争抢到锁谁便是Owner,而不会按进入阻塞队列的先后顺序先来先得 通过查看源码发现其构造方法中有一个带boolean类型参数的方法其参数fair默认为false可以修改其布尔值保证其公平性公平锁一般没有必要会降低并发度 二、ReentranLock条件变量 2.1 简介 条件变量 synchronized 中也有条件变量就是我们讲原理时那个 waitSet 休息室当条件不满足时进入 waitSet 等待 ReentrantLock 的条件变量比 synchronized 强大之处在于它是支持多个条件变量的这就好比 ● synchronized 是那些不满足条件的线程都在一间休息室等消息 ● 而 ReentrantLock 支持多间休息室有专门等烟的休息室、专门等早餐的休息室、唤醒时也是按休息室来唤 醒 使用要点 ● await 前需要获得锁 ● await 执行后会释放锁进入 conditionObject 等待 ● await 的线程被唤醒或打断、或超时取重新竞争 lock 锁 ● 竞争 lock 锁成功后从 await 后继续执行 使用例子 import lombok.extern.slf4j.Slf4j; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.ReentrantLock; import static cn.itcast.n2.util.Sleeper.sleep;Slf4j(topic c.Test24) public class Test24 {static final Object room new Object();static boolean hasCigarette false;static boolean hasTakeout false;static ReentrantLock ROOM new ReentrantLock();// 等待烟的休息室创建一个新的条件变量static Condition waitCigaretteSet ROOM.newCondition();// 等外卖的休息室创建一个新的条件变量static Condition waitTakeoutSet ROOM.newCondition();public static void main(String[] args) {new Thread(() - {// 尝试获取ReentrantLockROOM.lock();try {log.debug(有烟没[{}], hasCigarette);while (!hasCigarette) {log.debug(没烟先歇会);try {// 进入等烟休息室等待waitCigaretteSet.await();} catch (InterruptedException e) {e.printStackTrace();}}log.debug(可以开始干活了);} finally {// 解锁ROOM.unlock();}}, 小南).start();new Thread(() - {ROOM.lock();try {log.debug(外卖送到没[{}], hasTakeout);while (!hasTakeout) {log.debug(没外卖先歇会);try {waitTakeoutSet.await();} catch (InterruptedException e) {e.printStackTrace();}}log.debug(可以开始干活了);} finally {ROOM.unlock();}}, 小女).start();// 送外卖线程sleep(1);new Thread(() - {ROOM.lock();try {hasTakeout true;// 唤醒线程waitTakeoutSet.signal();} finally {ROOM.unlock();}}, 送外卖的).start();// 送烟线程sleep(1);new Thread(() - {ROOM.lock();try {hasCigarette true;// 唤醒线程waitCigaretteSet.signal();} finally {ROOM.unlock();}}, 送烟的).start();} }运行结果
http://www.hkea.cn/news/14424223/

相关文章:

  • 网站布局英文贵阳网站建设方案维护
  • 做销售的去哪个网站应聘医院管理系统
  • 做网站卖酒说说seo论坛
  • 做门窗安装去哪些网站找生意数据分析师培训机构
  • php在网站后台建设中的优势 张晋芳30秒牢记5个域名
  • 怎么看网站空间多大建筑工程行业网站建设方案
  • 哪个网站下载软件最安全深圳广告设计与制作公司
  • 免费网站空间和域名陕西示范校建设专题网站
  • 岳阳网站制作蓝衫网站建设
  • 即墨有做网站的吗长沙专业外贸网站建设
  • 南京市建设行政网站设计师导航
  • 微信 host 微网站模版湖南长沙有哪些大学
  • 屏蔽阿里云网站wordpress 用户功能
  • 做网站域名费向哪里交商业设计师是做什么的
  • 怎么做好网站开发_设计泉州网站建设制作
  • 青岛做网站公司电话百度网盟推广网站
  • 河南网站建设网络公司灵台县门户网站
  • 网站后台系统有哪些建筑工程网手机版
  • 廊坊关键词seo排名网站做网站建设公司网易互客
  • 网站建设费可以计入管理费用吗怒江企业网站建设
  • jsp网站seo优化做seo网站的公司
  • 网站开发开销专业商业空间设计公司
  • 帝国cms网站搬家教程泉州建站软件
  • 建设中学校园网站的来源手机制作视频的软件app免费
  • 北京响应式网站建设报价网站游戏怎么制作
  • phpcms手机网站怎么做做百度推广网站多少钱
  • 安州区建设局网站凡科网站投票排行榜是怎么做的
  • 有限公司网站建设 互成网络地址 四川合肥网站建设兼职
  • 长沙网站建设+个人深圳网深圳网站开发公司
  • 莆田个人仿牌外贸网站建设万网域名注册