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

财政局网站建设方案微网站建设教程

财政局网站建设方案,微网站建设教程,小网站如何做,谈谈百度和谷歌seo优化的区别java中可以通过new thread、实现runnable来进行实现线程。但是唯一的缺点是没有返回值、以及抛出异常#xff0c;而callable就可以解决这个问题。通过配合使用futuretask来进行使用。 并且Future提供了对任务的操作#xff0c;取消#xff0c;查询是否完成#xff0c;获取结…java中可以通过new thread、实现runnable来进行实现线程。但是唯一的缺点是没有返回值、以及抛出异常而callable就可以解决这个问题。通过配合使用futuretask来进行使用。 并且Future提供了对任务的操作取消查询是否完成获取结果。 Demo FutureTaskInteger futureTask new FutureTaskInteger(() - {Thread.sleep(10000);System.out.println(调用三方翻译接口);return 1024;});new Thread(futureTask).start();Integer integer futureTask.get(); // Integer integer futureTask.get(1, TimeUnit.SECONDS);while (true) {if (futureTask.isDone()) {System.out.println(完成任务);break;} else {System.out.println(执行中稍等.);}}Integer x futureTask.get();System.out.println(x);实现原理 FutureTask核心代码 基本属性 /* * Possible state transitions:* NEW - COMPLETING - NORMAL 任务正常执行返回结果是正常的结果* NEW - COMPLETING - EXCEPTIONAL 任务正常执行但是返回结果是异常* NEW - CANCELLED 任务直接被取消的流程* NEW - INTERRUPTING - INTERRUPTED */// 当前任务的状态private volatile int state;private static final int NEW 0; // 任务的初始化状态private static final int COMPLETING 1; // Callable的结果正常封装给当前FutureTaskprivate static final int NORMAL 2; // Normal任务正常结束private static final int EXCEPTIONAL 3; // 执行任务时发生了异常private static final int CANCELLED 4; // 任务被取消了private static final int INTERRUPTING 5; // 线程的中断状态被设置为了ture private static final int INTERRUPTED 6; // 线程被中断了// 当前要执行的任务private CallableV callable;// 存放任务返回结果的属性也就是futureTask.get 需要获取的结果private Object outcome; // 执行任务的线程private volatile Thread runner;// 单向链表存放通过get方法挂起等待的线程private volatile WaitNode waiters;任务 当线程start() 之后其实执行的就是call()方法。也就是通过futureTask的run方法执行的call()方法。 // run方法的执行流程最终会执行callable的call方法public void run() {// 保证任务的状态是NEW才执行或者CAS将当前线程设置为runner.if (state ! NEW ||!UNSAFE.compareAndSwapObject(this, runnerOffset,null, Thread.currentThread()))return;try {// 准备执行任务CallableV c callable;// 任务不为null 并且statenewif (c ! null state NEW) {V result; // 返回的结果boolean ran; // 任务执行是否正常结束try { // 调用callable的call方法。result c.call();ran true; // 正常结束 ran true} catch (Throwable ex) {result null; // 异常结果为null ran false; // 异常结束 ran falsesetException(ex); // 设置异常信息}if (ran) // 正常执行结束设置返回结果set(result);}} finally {// 执行完毕 或者异常 都将runner设置为null runner null;// 拿到状态int s state;// 如果中断 要做一些事情if (s INTERRUPTING)handlePossibleCancellationInterrupt(s);}}//设置result值protected void set(V v) {// cas设置state为 new-completingif (UNSAFE.compareAndSwapInt(this, stateOffset, NEW, COMPLETING)) {outcome v; // 返回结果给outcomeUNSAFE.putOrderedInt(this, stateOffset, NORMAL); // final state// 下面说finishCompletion();}}get get方法获取返回结果到挂起的位置 public V get() throws InterruptedException, ExecutionException {//拿状态int s state;//满足未完成状态 就需要等待if (s COMPLETING)// 挂起线程等待拿结果。s awaitDone(false, 0L);return report(s);}//线程要等待任务执行结束等待任务执行的状态大于completing状态private int awaitDone(boolean timed, long nanos)throws InterruptedException {// dealline get() 就是0 如果是get(time,unit) 追加当前系统时间final long deadline timed ? System.nanoTime() nanos : 0L;// 构建waitNode WaitNode q null;boolean queued false;//死循环for (;;) {//判断get线程是否中断了if (Thread.interrupted()) {//将当前节点从waiter中移除removeWaiter(q);//并且抛出中断异常throw new InterruptedException();}// 拿到现在任务的状态int s state;// 判断任务是否执行完毕if (s COMPLETING) {// q null。表示设置过了 直接移除waitNode线程if (q ! null)q.thread null;//返回当前任务状态return s;}// 如果任务的状态处于completing else if (s COMPLETING) // cannot time out yet//让步Thread.yield();else if (q null)// 线程状态还是new call方法可能还没有执行 准备挂起线程// 封装waitNode存放当前线程q new WaitNode();else if (!queued)// 如果waitNode还没有排在waiters中就拍进来(头插法) cas修改queued UNSAFE.compareAndSwapObject(this, waitersOffset,q.next waiters, q);// 如果get(time,unit)挂起线程方式else if (timed) {// 计算挂起时间nanos deadline - System.nanoTime();// 挂起时间 是否小于等于0 if (nanos 0L) {// 移除waiter 当前noderemoveWaiter(q);// 返回任务状态return state;}//正常指定挂起时间即可LockSupport.parkNanos(this, nanos);}else//get()挂起线程的方式LockSupport.park(this);}} finishCompletion唤醒线程 线程挂起后如果任务执行完毕由finishCompletioon唤醒线程 private void finishCompletion() {// assert state COMPLETING;for (WaitNode q; (q waiters) ! null;) {// 拿到第一个阶段cas的方式修改 将其设置为null if (UNSAFE.compareAndSwapObject(this, waitersOffset, q, null)) {for (;;) {// 拿到q线程信息Thread t q.thread;// 线程信息不为空if (t ! null) {// 将waitNode的thread设置为null q.thread null;// 唤醒这个线程LockSupport.unpark(t);}//往后遍历 接着唤醒WaitNode next q.next;if (next null)break;q.next null; // unlink to help gc//执行next的waitNode q next;}break;}}//拓展方法 没任何实现 done();//任务执行完毕callable null; // to reduce footprint}report // 任务结束。 private V report(int s) throws ExecutionException {// 拿到结果Object x outcome;// 判断是正常返回结束if (s NORMAL)// 返回结果return (V)x;// 任务状态是大于取消if (s CANCELLED)// 甩异常。throw new CancellationException();// 扔异常。throw new ExecutionException((Throwable)x); }// 正常返回 report // 异常返回 report // 取消任务 report // 中断任务 awaitDone流程图
http://www.pierceye.com/news/947667/

相关文章:

  • 南城网站建设公司php购物网站开发实例源码
  • 无锡网站备案百度应用市场
  • 高端房产网站建设上传空间网站
  • 上海城建建设官方网站中企动力网站价格
  • 网站建设中国十强阜阳网站制作公司多少钱
  • 网站建设公司 温州虚拟机电脑网页版
  • 网站建设原理与实践深建市住房和城乡建设局网站
  • 南通建设招聘信息网站平面设计工作室怎么接单
  • 手机网站开发技巧wordpress网站外包
  • 南昌外贸网站建设宿州做企业网站
  • 专题网站建站给医院做网站赚钱吗
  • 泉州市做网站网站建设培训需要多少钱
  • 网站开发的外文翻译静态网站制作视频
  • 小企业做网站有用吗大气网站首页欣赏
  • 常见的企业网站有哪些苏州网站建设一站通
  • 陕西省高速公路建设集团公司网站外包网站开发 收费
  • 免费做网站刮刮卡腾讯html网页制作软件
  • 网站快照网站反链一般怎么做
  • 山东东营建设网官方网站专做h5的公司网站
  • 电商网站建设题库做海岛旅游类网站的背景及意义
  • 网站开发后台框架wordpress 文章同步微信
  • 小型网站有哪些怎么搭建自己的网站
  • 注册网站域名的入口网站开发公司的
  • vs2012 建网站光明区公明街道
  • 公司网站建设属于什么职位杭州专业seo公司
  • 网站SEO容易做吗网络链接推广
  • 建立免费公司网站自适应型网站建设费用
  • 郑州大学现代远程教育《网页设计与网站建设》课程考核要求云南网站建设企业
  • 电商网站的支付功能广州建设诚信评分网站
  • 网站在哪里建立刷推广