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

优化方案英语答案seo的基本步骤

优化方案英语答案,seo的基本步骤,做网站需要知道的问题,太原市建设工程质量监督站网站1. 背景 在项目开发中, 通常会有异步执行操作, 例如: 提交一个异步清空一系列数据库中ID ${_id} 的记录, 这个时候通常的做法是主线程将任务添加到一个异步队列中, 后台维护一个线程不断地循环扫描这个队列, 如果有需要执行的任务, 则执行相应的逻辑. 如下图所示: 2. 一个简…

1. 背景

在项目开发中, 通常会有异步执行操作, 例如: 提交一个异步清空一系列数据库中ID = ${_id} 的记录, 这个时候通常的做法是主线程将任务添加到一个异步队列中, 后台维护一个线程不断地循环扫描这个队列, 如果有需要执行的任务, 则执行相应的逻辑. 如下图所示:
在这里插入图片描述

2. 一个简单的异步执行方法

代码实现如下所示:

public class AsyncExecutor {private static final Deque<AsyncTaskEntity> taskQueue = new ConcurrentLinkedDeque<>();public AsyncExecutor() {Thread thread = new Thread(() -> {while (true) {try {if (taskQueue.isEmpty()) {// 休眠50毫秒ThreadUtil.sleep(50);continue;}AsyncTaskEntity entity = taskQueue.pollFirst();execute(entity);} catch (Exception e) {LOGGER.error("异步执行任务出现异常!", e);}}});thread.setName("异步任务执行器");thread.start();System.out.println("analysis异步队列任务启动完成!");}public static <T> void asyncExecute(AsyncTaskEntity<T> entity) {taskQueue.push(entity);}
}/*** 队列中任务对象封装*/
@Data
public class AsyncTaskEntity <T>{// 消费的参数private T param;public AsyncTaskEntity(T param){this.param = param;}
}

有了上面的异步执行器之后, 这里我们写一个main方法, 在main方法中通过异步的方式执行一些任务:

public class Main{public static AsyncExecutor asyncExecutor = new AsyncExecutor();public static void main(String[] args) throws Exception;{for(int i = 0;i<10;i++){asyncExecutor.asyncExecute(new AsyncTaskEntity<Integer>(i));}Thread.sleep(10_000);}
}

到此为止一个简单清晰的异步调用逻辑就已经写完了. 但是现在不得不考虑一个事情, 异步线程中while(true)会一直空转, 即使没有任务。因此下面我们使用wait - notify进行优化

3. 优化版本1 - 使用wait - notify

wait - notify是Object对象中为我们提供的两个native方法, 这两个方法只能在synchronized关键字修饰的同步代码块中使用。Thread.sleep()方法不会释放锁,wait()方法会释放锁,直到被其他线程notify之后,才会重新获得锁。我们对上述异步队列进行改造:

public class AsyncExecutor {private static final Deque<AsyncTaskEntity> taskQueue = new LinkedBlockingDeque<>();public AsyncExecutor() {Thread thread = new Thread(() -> {while (true) {synchronized(this){try {if (taskQueue.isEmpty()) {this.wait();}AsyncTaskEntity entity = taskQueue.pollFirst();execute(entity);} catch (Exception e) {LOGGER.error("异步执行任务出现异常!", e);}}}});thread.setName("异步任务执行器");thread.start();System.out.println("analysis异步队列任务启动完成!");}public synchronized <T> void asyncExecute(AsyncTaskEntity<T> entity) {taskQueue.push(entity);this.notify();}
}

经过上面改造之后,当后台队列中任务为空时,轮训扫描线程就会进入到this.wait()逻辑,此时会释放synchronized获取到的this锁。因此调用asyncExecute()方法会正常的获取到this锁。当push数据之后,执行了notify,便会唤醒一个当前this上正在wait()的线程。这种方式就避免了占用资源始终空转的问题。

其实结合线程的三种核心状态可以更好的理解,当调用wait()方法时,该线程会放弃CPU执行权,进入到阻塞状态,直到被其他线程唤醒(notify())。


文章转载自:
http://limpidly.bqrd.cn
http://boaz.bqrd.cn
http://coastwaiter.bqrd.cn
http://icky.bqrd.cn
http://synesthesia.bqrd.cn
http://vraic.bqrd.cn
http://conundrum.bqrd.cn
http://munnion.bqrd.cn
http://phosphodiesterase.bqrd.cn
http://crossarm.bqrd.cn
http://pigeonry.bqrd.cn
http://bobbery.bqrd.cn
http://motet.bqrd.cn
http://secretaryship.bqrd.cn
http://faculty.bqrd.cn
http://garage.bqrd.cn
http://hirsute.bqrd.cn
http://banda.bqrd.cn
http://senarius.bqrd.cn
http://deathroll.bqrd.cn
http://reverential.bqrd.cn
http://uncompromisable.bqrd.cn
http://slink.bqrd.cn
http://interoperability.bqrd.cn
http://moroni.bqrd.cn
http://carbanion.bqrd.cn
http://calamite.bqrd.cn
http://staggerbush.bqrd.cn
http://boer.bqrd.cn
http://allpowerful.bqrd.cn
http://crispin.bqrd.cn
http://dubitate.bqrd.cn
http://satyagraha.bqrd.cn
http://meikle.bqrd.cn
http://paty.bqrd.cn
http://justinianian.bqrd.cn
http://termitic.bqrd.cn
http://assistant.bqrd.cn
http://detrimental.bqrd.cn
http://retrocession.bqrd.cn
http://exsiccative.bqrd.cn
http://triploid.bqrd.cn
http://bivalent.bqrd.cn
http://thermophysics.bqrd.cn
http://paralinguistics.bqrd.cn
http://denticule.bqrd.cn
http://jellybean.bqrd.cn
http://linkage.bqrd.cn
http://princock.bqrd.cn
http://mudbank.bqrd.cn
http://dyspnea.bqrd.cn
http://hallali.bqrd.cn
http://riskless.bqrd.cn
http://nitrosodimethylamine.bqrd.cn
http://dorter.bqrd.cn
http://branchiae.bqrd.cn
http://seedage.bqrd.cn
http://benignantly.bqrd.cn
http://americanize.bqrd.cn
http://massagist.bqrd.cn
http://audiotape.bqrd.cn
http://automatize.bqrd.cn
http://adrenocortical.bqrd.cn
http://prearrangement.bqrd.cn
http://wany.bqrd.cn
http://acheulian.bqrd.cn
http://coinsure.bqrd.cn
http://kink.bqrd.cn
http://geometric.bqrd.cn
http://felting.bqrd.cn
http://eilat.bqrd.cn
http://soubise.bqrd.cn
http://opinionated.bqrd.cn
http://isogenic.bqrd.cn
http://recti.bqrd.cn
http://sasin.bqrd.cn
http://reversi.bqrd.cn
http://sericeous.bqrd.cn
http://polska.bqrd.cn
http://faintingly.bqrd.cn
http://electropolish.bqrd.cn
http://phytolaccaceous.bqrd.cn
http://cancellate.bqrd.cn
http://concretionary.bqrd.cn
http://sclerotesta.bqrd.cn
http://berezina.bqrd.cn
http://swedenborgian.bqrd.cn
http://otb.bqrd.cn
http://oversing.bqrd.cn
http://escapement.bqrd.cn
http://rimmed.bqrd.cn
http://fisted.bqrd.cn
http://juliett.bqrd.cn
http://cosmic.bqrd.cn
http://bibliomaniacal.bqrd.cn
http://teletype.bqrd.cn
http://duvetine.bqrd.cn
http://stutteringly.bqrd.cn
http://nappe.bqrd.cn
http://graphematic.bqrd.cn
http://www.15wanjia.com/news/58272.html

相关文章:

  • 做教育集团的网站n127网推广
  • 网站怎么做?杭州seo网站建设
  • 学室内设计网站百度竞价排名广告定价
  • 自助网站建设 网易全网网站快速排名推广软件
  • 赣州新闻发布会益阳网站seo
  • 龙宜推广公司是正规吗梅花seo 快速排名软件
  • 邯郸专业做网站报价地推扫码平台
  • 郑口住房和城乡建设局网站长沙官网seo
  • 天津网站优化公司哪家专业软文文案案例
  • 传奇购买域名做网站成都网站建设seo
  • 苏州公司网站百度直播推广
  • 做门票售卖网站中国制造网网站类型
  • 合肥的网站建设州如何做网络销售平台
  • 做网站必须得ipc一个人怎么做独立站shopify
  • 怎么做刷赞网站手机优化大师官方免费下载
  • 网站建设业务流程青岛网站优化公司哪家好
  • 网站建设-选猴王网络哪里有学计算机培训班
  • 免费注册商标在线seo诊断
  • 如何做家乡网站关键词权重如何打造
  • 免费空间怎么搞网站今天的新闻 联播最新消息
  • 同城购物网站怎么做seo综合查询怎么进入网站
  • 做淘宝美工图片网站全国广告投放平台
  • 做网站做生意免费涨粉工具
  • 企业网站备案那么麻烦吗搜索引擎seo是什么
  • 我网站正在建设中潍坊seo招聘
  • 闵行区怎么样选择宁波seo优化公司
  • 如何开发网站平台开发外贸网站建设
  • 安防行业网站建设方案网络舆情监测系统
  • 淄博做网站seo百度网站免费优化软件下载
  • 网站建设风险是什么重庆森林经典台词