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

网站管理 官网微信公众平台开发者是什么

网站管理 官网,微信公众平台开发者是什么,wordpress文章半透明,网站界面分析预期目标 1.实现一个相对完备的线程池 2.自定义拒绝策略#xff08;下一节#xff09; 线程池的基本参数 1.核心线程数 2.超时时间 3.拒绝策略#xff08;在下一篇中添加#xff09; 4.工作队列 5.任务队列 工作机制 当添加一个任务到线程池中时#xff0c;线程池会…预期目标 1.实现一个相对完备的线程池 2.自定义拒绝策略下一节 线程池的基本参数 1.核心线程数 2.超时时间 3.拒绝策略在下一篇中添加 4.工作队列 5.任务队列 工作机制 当添加一个任务到线程池中时线程池会判断工作线程数量是否小于核心线程数若小于创建工作线程执行任务反之将其添加到任务队列若是当前任务队列已经满了可以执行拒绝策略拒绝策略有很多种例如死等[会阻塞main线程]放弃任务抛出异常等等 工作线程执行过程 工作线程会先将手头上的任务干完然后到工作队列当中取如果工作队列中还有任务取出来继续执行…(周而复始) 但是有可能在一段时间内工作队列中没任务执行这个时候我们可以选择让它死等或者超出指定时间之后自己销毁。 了解这些之后正式开始coding… 1.构建一个阻塞队列 在前面博客中已经实现过了需要锁两个条件变量[生产者消费者]普通队列这三个参数。 Slf4j class BlockQueueT {//1.任务队列private DequeT tDeque new ArrayDeque();//2.锁private ReentrantLock lock new ReentrantLock();//3.两个条件变量(生产者消费者)private Condition notEmpty;private Condition notFull;private int capacity;public BlockQueue(int capacity) {this.notEmpty lock.newCondition();this.notFull lock.newCondition();this.capacity capacity;}//带超时的阻塞获取public T poll(long timeout, TimeUnit timeUnit) {lock.lock();try {//将timeout转换long nanos timeUnit.toNanos(timeout);while (tDeque.isEmpty()) {try {//返回的是剩余的时间if (nanos 0) return null;nanos notEmpty.awaitNanos(nanos);} catch (InterruptedException e) {log.error(error{},e.getMessage());}}notFull.signal();return tDeque.removeFirst();} finally {lock.unlock();}}//消费者public T take() {lock.lock();try {while (tDeque.isEmpty()) {try {notEmpty.await();} catch (InterruptedException e) {log.error(error{},e.getMessage());}}notFull.signal();return tDeque.removeFirst();//消费对头} finally {lock.unlock();}}//阻塞添加//生产者public void put(T ele) {lock.lock();try {while (tDeque.size() capacity) {try {log.info(等待加入任务队列......);notFull.await();} catch (InterruptedException e) {log.error(error{},e.getMessage());}}log.info(已加入任务队列);tDeque.addLast(ele);notEmpty.signal();} finally {lock.unlock();}}//非阻塞式添加//即使失败也不会阻塞住主线程public boolean offer(T ele, long timeout, TimeUnit timeUnit){lock.lock();try {long nanosTime timeUnit.toNanos(timeout);while (tDeque.size() capacity) {try {if (nanosTime 0) return false;nanosTime notFull.awaitNanos(nanosTime);} catch (InterruptedException e) {log.error(error{},e.getMessage());}}log.info(已加入任务队列);tDeque.addLast(ele);notEmpty.signal();return true;} finally {lock.unlock();}}//获取大小public int size() {lock.lock();try {return tDeque.size();} finally {lock.unlock();}} }2.写线程池 Slf4j class ThreadPool {//任务队列private BlockQueueRunnable taskQueue;//线程集合 我们需要对线程做一个包装private HashSetWorker workers new HashSet();//核心线程数量private long coreSize;//超时时间private long timeout;//时间单位private TimeUnit timeUnit;//自定义拒绝策略//private RejectPolicy rejectPolicy;public ThreadPool(int queueCapacity,long coreSize,long timeout,TimeUnit timeUnit){taskQueue new BlockQueue(queueCapacity);this.coreSize coreSize;this.timeout timeout;this.timeUnit timeUnit;}//执行任务public void execute(Runnable task){//当任务数量尚未超过coreSizesynchronized (workers){if (workers.size() coreSize){log.info(创建工作线程{},task);Worker worker new Worker(task);workers.add(worker);worker.start();}else{log.info(加入到任务队列{},task);//有可能会阻塞在这里 进而将主线程阻塞掉taskQueue.put(task);//这里会有很多种策略自定义策略//1.死等//2.带超时等待//3.让调用者放弃任务执行//4.让调用者抛出异常//5.让调用者自己执行任务//策略模式操作抽象成接口实现代码是传过来不会写死}}}class Worker extends Thread{private Runnable task;public Worker(Runnable task){this.task task;}Overridepublic void run() {while (task ! null || (task taskQueue.poll(timeout,timeUnit)) ! null){try {log.info(正在执行...{},task);//执行任务task.run();}catch (Exception e){System.out.println(e.getMessage());}finally {//不要忘记这一步task null;}}synchronized (workers){log.info(worker被移除{},this);workers.remove(this);}}} }测试: [main] INFO com.define.ThreadPool - 创建工作线程com.define.TestPool$$Lambda$1/188058798165b3120a [main] INFO com.define.ThreadPool - 创建工作线程com.define.TestPool$$Lambda$1/18805879814783da3f [main] INFO com.define.ThreadPool - 加入到任务队列com.define.TestPool$$Lambda$1/188058798149097b5d [Thread-0] INFO com.define.ThreadPool - 正在执行...com.define.TestPool$$Lambda$1/188058798165b3120a [main] INFO com.define.BlockQueue - 已加入任务队列 [Thread-1] INFO com.define.ThreadPool - 正在执行...com.define.TestPool$$Lambda$1/18805879814783da3f [main] INFO com.define.ThreadPool - 加入到任务队列com.define.TestPool$$Lambda$1/18805879816e2c634b [main] INFO com.define.BlockQueue - 已加入任务队列 [main] INFO com.define.ThreadPool - 加入到任务队列com.define.TestPool$$Lambda$1/188058798137a71e93 [main] INFO com.define.BlockQueue - 已加入任务队列 [main] INFO com.define.ThreadPool - 加入到任务队列com.define.TestPool$$Lambda$1/18805879817e6cbb7a [main] INFO com.define.BlockQueue - 已加入任务队列 [main] INFO com.define.ThreadPool - 加入到任务队列com.define.TestPool$$Lambda$1/18805879817c3df479 [main] INFO com.define.BlockQueue - 已加入任务队列 [main] INFO com.define.ThreadPool - 加入到任务队列com.define.TestPool$$Lambda$1/18805879817106e68e [main] INFO com.define.BlockQueue - 已加入任务队列 [main] INFO com.define.ThreadPool - 加入到任务队列com.define.TestPool$$Lambda$1/18805879817eda2dbb [main] INFO com.define.BlockQueue - 已加入任务队列 [main] INFO com.define.ThreadPool - 加入到任务队列com.define.TestPool$$Lambda$1/18805879816576fe71 [main] INFO com.define.BlockQueue - 已加入任务队列 [main] INFO com.define.ThreadPool - 加入到任务队列com.define.TestPool$$Lambda$1/188058798176fb509a [main] INFO com.define.BlockQueue - 已加入任务队列 [main] INFO com.define.ThreadPool - 加入到任务队列com.define.TestPool$$Lambda$1/1880587981300ffa5d [main] INFO com.define.BlockQueue - 已加入任务队列 [main] INFO com.define.ThreadPool - 加入到任务队列com.define.TestPool$$Lambda$1/18805879811f17ae12 [main] INFO com.define.BlockQueue - 等待加入任务队列......测试没什么问题但是能发现如果当前工作线程都是busy,并且任务队列也满了当执行put的时候就会阻塞在这里put阻塞—execute阻塞----main线程阻塞当然阻塞也是一种方式那如果不想让它阻塞比如我添加不进去想让他直接丢弃或者抛出异常应该怎么办那就需要自定义一套拒绝策略下一节继续。
http://www.hkea.cn/news/14408129/

相关文章:

  • 网站建设相关视频教程网站建设的一些问题
  • 网站开发 php模板网站搭建公司排名
  • ps怎么做网站页面oa管理系统免费版
  • 一般设计网站页面用什么软件做绘图软件免费版
  • 专业的网页设计服务seo综合查询工具可以查看哪些数据
  • php初学者网站网站自己怎么做直播
  • 在哪个网站做流动补胎的广告好企业宣传片策划制作
  • 南昌 网站 公司类似凡科建站的平台
  • 青岛高品质网站建设网站建设的实施制作阶段包括
  • 黑龙江省建设教育网站建设部住房城乡建设厅网站
  • wordpress 增加站长统计哪个平台电商运营比较好
  • 制作网站公司谁家好哪些网站使用wordpress
  • 刘金鹏做网站快速排名优化推广价格
  • wordpress子目录建站怎么选择主题快速搭建论坛
  • 定制企业网站有哪些为什么网站要用外链
  • 宁波网站制作设计分销电商平台有哪些
  • 聊城网站开发公司中铁建设集团有限公司招标网
  • 开发app和微网站有哪些id注册网站
  • aliyun怎么建网站太原it培训机构
  • 胶州市 网站建设沙田镇网站仿做
  • 学生制作个人网站网站建设服务定制
  • 外贸都是在哪些网站做wordpress英文版本
  • 用织梦做的网站怎么上传虚拟ui首页界面设计
  • 免费设计logo的网站有哪些咋做抽奖网站
  • 个体营业执照网站建设优化加盟代理
  • 上海网站 建设景观设计师做交通分析常用网站
  • 如何修改网站后台时间南充做网站略奥网络
  • 大型网站建设兴田德润赞扬直播平台推荐
  • 网站建设责任分工永年网站制作
  • 让别人做一个网站需要多少钱手机网址打不开怎么解决