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

龙溪网站建设企业/百度的营销策略

龙溪网站建设企业,百度的营销策略,前端网站怎么做,做网站的公司哪些靠谱FutureTask类 重点是那个股票交易处理程序的例子,认真看三遍。本文花了三个小时。 GitHub代码欢迎star。 小白认为学习语言最好的方式就是模仿、思考别人为什么这么写。 FutureTask类同时实现类Runnable接口和Future接口。因此,FutureTask类技能拥有Runn…

FutureTask类

重点是那个股票交易处理程序的例子,认真看三遍。本文花了三个小时。

GitHub代码欢迎star。

小白认为学习语言最好的方式就是模仿思考别人为什么这么写。

FutureTask类同时实现类Runnable接口和Future接口。因此,FutureTask类技能拥有Runnable接口提供的异步计算能力,也能拥有Future接口提供的返回值给调用方的Future对象取消任务的能力。FutureTask类可以用于封装Callable和Runnable接口。

//Future<Integer> future = executor.submit(Callable);
FutureTask<Integer> future = new FutureTaks<Integer>(Callable);
future.run()

run方法会调用任务,并将任务的计算结果赋值给Future对象。

也可以将FutureTask实例交给Executor对象用于执行。

executor.submit(future);

由于FutureTask类也实现了Future接口,因此FutureTak接口实例可以用来取消任务,检查任务等。

创建可取消的任务。

取消任务可以使用执行器返回的Future对象,而创建和执行任务可以使用前面讨论的FutureTask类。

开发可以处理上百万次请求的模拟器。会发送数千条数据交易请求给模拟器。模拟器包含的线程池用于处理这些请求。
还将编写一个“邪恶”的线程,它会随机选择诺干订单,并且尝试取消他们。如果订单已经执行,取消请求会失败。
如果在订单在被分配给线程执行之前接收到取消请求,那么订单会被取消。如果交易订单正在执行。并且线程可被中断,
那么在订单处理过程中接收的取消请求会结束剩余的处理流程。从而取消订单。


/*** Created by guo on 2018/2/15.* 演示可取消任务的股票交易处理程序*/
public class StocksOrderProcessor {static final int MAX_NUMBER_OF_ORDER = 1_000_000;       //交易订单//1、创建数量为1000的线程池来执行订单。经过测试1000个线程,CPU维持在70%-80%左右。static private ExecutorService executor = Executors.newFixedThreadPool(1000);//2、创建ArrayList来保存执行执行订单的引用static private List<Future> ordersToProcess = new ArrayList<>();/*** 创建内部私有类OrderExecutor以处理订单执行的业务逻辑。* OrderExecutor实现了Callable接口以支持异步调用。*/public static class OrderExecutor implements Callable {int id = 0;int count = 0;//3、传入整型变量id来记录订单编号。public OrderExecutor(int id) {this.id = id;}@Overridepublic Object call() throws Exception {try {//4、将技术设为1000,每次计数前,让线程休眠一段不同的时间while (count < 1000) {count++;//5、通过让线程休眠一段不同的时间,模拟现实中每个订单需要不同的处理时间。Thread.sleep(new Random(System.currentTimeMillis() % 10).nextInt(10));}System.out.println("Successfully executed order:" + id);} catch (Exception ex) {throw (ex);}return id;}}
}

主函数

public static void main(String[] args) {System.out.printf("Submitting %d trades%n", MAX_NUMBER_OF_ORDER);//6、通过循环遍历,提交一百万订单。for (int i = 0; i < MAX_NUMBER_OF_ORDER; i++) {submitOrder(i);}//7、创建“邪恶”线程尝试随机的取消某些订单。//每当执行到这里时,就会创建一些取消请求,并针对待处理的订单列表中存储的Future对象执行。new Thread(new EvilThread(ordersToProcess)).start();System.out.println("Cancelling a few order at random");try {//8a、某些订单可能已经被处理,模拟器就会继续处理剩余订单。// b、如果订单在执行器分配线程之前被取消,就将永远不会执行。// c、为了留有足够的时间结束所有待处理的订单,让执行器等待30秒。executor.awaitTermination(30, TimeUnit.SECONDS);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("Checking status before shutdown");int count = 0;//9a、通过循环遍历,统计有多少订单被成功取消。// b、对于订单中每一个Future对象,调用isCancelld方法。// c、如果对应的被成功取消,则方法返回truefor (Future f : ordersToProcess) {if (f.isCancelled()) {count++;}}System.out.printf("%d trades cancelled%n", count);//10、立即停止执行器释放分配的所有资源 (貌似我的百万订单根本停不下来啊,求解!)executor.shutdownNow();}private static void submitOrder(int id) {//6、a 创建一个Callable实例,每个实例都有为一个的Id供跟踪Callable<Integer> callable = new OrderExecutor(id);//6、b 调用ExecutorService的submit方法可将创建的任务提交以待执行。//并且将submit方法返回的对象放到待处理订单的数组里列表中。ordersToProcess.add(executor.submit(callable));
}

邪恶线程


/*** 邪恶线程,随机的取消某些订单。*/
class EvilThread implements Runnable {private List<Future> ordersToProcess;//1、在构造函数中传入待处理的订单列表,这样可以对某一些Future对象发送取消请求。public EvilThread(List<Future> future) {this.ordersToProcess = future;}@Overridepublic void run() {//2、创建100个取消请求Random myNextKill = new Random(System.currentTimeMillis() % 100);for (int i = 0; i < 100; i++) {//3、随机选择Future对象进行取消。int index = myNextKill.nextInt(StocksOrderProcessor.MAX_NUMBER_OF_ORDER);//4、调用Future对象的cancel方法以发送请求,并将cancel方法的参数设为ture。表示任务可能会在执行过程中被中断。boolean cancel = ordersToProcess.get(index).cancel(true);//5、判断是否取消成功,if (cancel) {System.out.println("Cancel Order Succeded:" + index);} else {System.out.println("cancel Order Failed:" + index);}try {//6、在每两个请求之间让“邪恶”线程睡一会。Thread.sleep(myNextKill.nextInt(100));} catch (InterruptedException e) {e.printStackTrace();}}}
}

程序运行后部分输出如下:

Submitting 1000000 tradesSuccessfully executed order:28
Successfully executed order:380
Successfully executed order:288
Successfully executed order:120
Cancelling a few order at random
Successfully executed order:116
Successfully executed order:1004
Successfully executed order:1005Cancel Order Succeded:698021
cancel Order Failed:98832(重点)
...
Successfully executed order:12268
Successfully executed order:12420
Successfully executed order:13190
Successfully executed order:12199Checking status before shutdown
99 trades cancelled(重点)
Successfully executed order:14045      //估计Kill线程太多了,遗漏这个了.求解.

从输出可以看到:

  • 订单698021被成功取消,这个订单还未执行,
  • 订单98832的取消请求失败了,因为这个订单已经执行结束.
  • 在发送的100个请请求中,有99个被成功取下.也可能是100%,取决你的电脑配置.
http://www.jmfq.cn/news/5153059.html

相关文章:

  • 哪些网站的简历做的比较好/西安seo建站
  • 专业做鞋子的网站有哪些/抖音seo
  • 苏州seo营销/如何优化培训体系
  • 有没有做高仿的网站/seo软文推广工具
  • 重庆网站建设网络推广/搜索词热度查询
  • 密云区住房城乡建设委官方网站/推广策划
  • 为女朋友做的表白网站/宁波seo公司推荐
  • 兼职做网站这样的网站/b站黄页推广软件
  • 昆山网站建设哪家好/手机百度网址大全首页
  • 我本沉默传奇新开网站/今日国际新闻最新消息事件
  • 专业的培训网站建设/软文营销定义
  • 郑州网站设计/十八大禁用黄app入口
  • 日本最新消息/上海百度提升优化
  • 百度网站置顶怎么做/衡阳seo快速排名
  • 政府网站html源码/免费新闻源发布平台
  • 聊城百度做网站的/谷歌seo招聘
  • 西安搬家公司收费/seo研究院
  • 租用海外服务器的网站有域名吗/谷歌下载安装
  • 做网站公奇闻司郑州汉狮/谷歌seo服务
  • 免费域名的网站/营销型网站建设团队
  • 整形医院网站建设/苏州网站制作推广
  • 如何修改单页网站/关键词分词工具
  • 建设企业网站的需求分析/朋友圈营销
  • 自己怎么做免费网站空间/今日的新闻头条10条
  • 卖挂的网站怎么做/百度账号登录入口网页版
  • 做外围代理要有自己的网站/永久免费的电销外呼系统
  • 怎么看一个网站是哪个公司做的/系统优化软件
  • 修改wordpress logo/首页关键词优化公司
  • 做购物网站的数据库/长尾词seo排名优化
  • 做产品类的工作上什么网站好/网页设计大作业