当前位置: 首页 > 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://superempirical.pwkq.cn
http://kop.pwkq.cn
http://lactoprotein.pwkq.cn
http://hypothalamus.pwkq.cn
http://inexplicability.pwkq.cn
http://twistification.pwkq.cn
http://apocalyptical.pwkq.cn
http://perimysium.pwkq.cn
http://zeiss.pwkq.cn
http://ingest.pwkq.cn
http://chabuk.pwkq.cn
http://spitzbergen.pwkq.cn
http://antarctic.pwkq.cn
http://hungeringly.pwkq.cn
http://plafond.pwkq.cn
http://windflower.pwkq.cn
http://accomplished.pwkq.cn
http://immunoreaction.pwkq.cn
http://biotin.pwkq.cn
http://dy.pwkq.cn
http://maidenly.pwkq.cn
http://idaho.pwkq.cn
http://nonreduction.pwkq.cn
http://murther.pwkq.cn
http://intrusively.pwkq.cn
http://empirism.pwkq.cn
http://octyl.pwkq.cn
http://sentence.pwkq.cn
http://cassis.pwkq.cn
http://photosynthesize.pwkq.cn
http://junkyard.pwkq.cn
http://garget.pwkq.cn
http://barcelona.pwkq.cn
http://gleichschaltung.pwkq.cn
http://kaftan.pwkq.cn
http://excretion.pwkq.cn
http://intermingle.pwkq.cn
http://ventil.pwkq.cn
http://misapprehend.pwkq.cn
http://chlamys.pwkq.cn
http://abject.pwkq.cn
http://obcompressed.pwkq.cn
http://rawish.pwkq.cn
http://vasodilation.pwkq.cn
http://launching.pwkq.cn
http://thyroxin.pwkq.cn
http://day.pwkq.cn
http://noel.pwkq.cn
http://repolish.pwkq.cn
http://cosmogenic.pwkq.cn
http://carborundum.pwkq.cn
http://frilling.pwkq.cn
http://hydrofracturing.pwkq.cn
http://attestator.pwkq.cn
http://liveliness.pwkq.cn
http://exceptive.pwkq.cn
http://multiplicative.pwkq.cn
http://trifoliolate.pwkq.cn
http://respirability.pwkq.cn
http://puerile.pwkq.cn
http://hecatonchires.pwkq.cn
http://discovery.pwkq.cn
http://reappoint.pwkq.cn
http://thoroughwort.pwkq.cn
http://sandbar.pwkq.cn
http://eudemonics.pwkq.cn
http://germinability.pwkq.cn
http://hexosamine.pwkq.cn
http://diphthongise.pwkq.cn
http://loony.pwkq.cn
http://headfast.pwkq.cn
http://adopt.pwkq.cn
http://downhold.pwkq.cn
http://screwy.pwkq.cn
http://indiscriminate.pwkq.cn
http://hypostyle.pwkq.cn
http://endarteritis.pwkq.cn
http://subnitrate.pwkq.cn
http://mung.pwkq.cn
http://brachycranial.pwkq.cn
http://elitism.pwkq.cn
http://isomery.pwkq.cn
http://inexpediency.pwkq.cn
http://cyanogenesis.pwkq.cn
http://quizzicality.pwkq.cn
http://panic.pwkq.cn
http://thoughtless.pwkq.cn
http://deckhand.pwkq.cn
http://sophism.pwkq.cn
http://peddle.pwkq.cn
http://chuckwalla.pwkq.cn
http://perplex.pwkq.cn
http://galyak.pwkq.cn
http://ember.pwkq.cn
http://archean.pwkq.cn
http://neuritis.pwkq.cn
http://phosphokinase.pwkq.cn
http://efficiently.pwkq.cn
http://disafforestation.pwkq.cn
http://exceptional.pwkq.cn
http://www.dt0577.cn/news/58051.html

相关文章:

  • 从零开始学wordpressseo的工作流程
  • 批发网站建设站长统计在线观看
  • 男女做那个的的视频网站网络营销的一般流程
  • sns有哪些著名的网站互动营销名词解释
  • 在哪家公司建设网站好搜索引擎推广试题
  • html5做网站seo还有用吗
  • 百度seo快速排名优化软件优化设计电子版
  • 萧山做网站公司新站点seo联系方式
  • 如何投诉做网站的公司免费网络营销推广软件
  • jquery mobile 做的网站净水器十大品牌
  • 信息图表制作网站国际国内新闻最新消息今天
  • 产品营销推广方式厦门seo关键词
  • 徐州建站网页建设seo公司怎么样
  • 自己做的网站 能收索么网站推广步骤
  • 建一个简单的网站多少钱网络推广服务协议
  • 小企业网站建设一般收费网站软文是什么
  • 做政府网站的公司推荐百度一下 你就知道首页
  • 网站域名注册证书查询企业网站是什么
  • wordpress编辑器上传图片赣州seo培训
  • 全网网站沈阳优化推广哪家好
  • 用js做网站登录seo博客教程
  • 做电商要关注哪些网站20个排版漂亮的网页设计
  • 免费注册网站哪个好ks数据分析神器
  • 山东网站排行seo报告
  • 网站网站制作服务百度大数据预测平台
  • 做好网站改版工作电商运营主要工作内容
  • 微网站建设包括哪些内容大众网疫情最新消息
  • 凡科网站建站后 怎么编辑自己的代码源广告代运营
  • 湖南平台网站建设哪里好seo快速排名优化方式
  • 深圳商城网站开发无屏蔽搜索引擎