仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 386|回复: 9
打印 上一主题 下一主题

[学习教程] 来看Java中准时启动线程

[复制链接]
飘飘悠悠 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:13:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
J2ME在手机游戏开发的作用也是无用质疑的。至于桌面程序,可能有人说java不行,界面不好看,但是请看看NetBeans和Eclipse吧,他们都是利用java开发的,而他们的界面是多么的华丽,所以界面决不是java的缺点。还有一个不得不提的优点就是大多java人员都挂在嘴边的java的跨平台性,目前这确实也是java优点之一。
这里供应两种在指准时间后启动线程的办法。一是经由过程java.util.concurrent.DelayQueue完成;二是经由过程java.util.concurrent.ScheduledThreadPoolExecutor完成。
1.java.util.concurrent.DelayQueue
类DelayQueue是一个无界堵塞行列,只要在提早期满时才干从中提取元素。它承受完成Delayed接口的实例作为元素。
<<interface>>Delayed.java
packagejava.util.concurrent;
importjava.util.*;
publicinterfaceDelayedextendsComparable<Delayed>{
  longgetDelay(TimeUnitunit);
}
getDelay()前往与此对象相干的残剩提早工夫,以给定的工夫单元暗示。此接口的完成必需界说一个compareTo办法,该办法供应与此接口的getDelay办法分歧的排序。
DelayQueue行列的头部是提早期满后保留工夫最长的Delayed元素。当一个元素的getDelay(TimeUnit.NANOSECONDS)办法前往一个小于即是0的值时,将产生到期。
2.计划带偶然间提早特征的行列
类DelayedTasker保护一个DelayQueue<DelayedTask>queue,个中DelayedTask完成了Delayed接口,并由一个外部类界说。内部类和外部类都完成Runnable接口,关于内部类来讲,它的run办法是按界说的工夫前后掏出行列中的义务,而这些义务即外部类的实例,外部类的run办法界说每一个线程详细逻辑。
这个计划的本色是界说了一个具偶然间特征的线程义务列表,并且该列表能够是恣意长度的。每次增加义务时指定启动工夫便可。
DelayedTasker.java
packagecom.zj.timedtask;
importstaticjava.util.concurrent.TimeUnit.SECONDS;
importstaticjava.util.concurrent.TimeUnit.NANOSECONDS;
importjava.util.Collection;
importjava.util.Collections;
importjava.util.Random;
importjava.util.concurrent.DelayQueue;
importjava.util.concurrent.Delayed;
importjava.util.concurrent.ExecutorService;
importjava.util.concurrent.Executors;
importjava.util.concurrent.TimeUnit;
publicclassDelayedTaskerimplementsRunnable{
  DelayQueue<DelayedTask>queue=newDelayQueue<DelayedTask>();
  publicvoidaddTask(DelayedTaske){
   queue.put(e);
  }
  publicvoidremoveTask(){
   queue.poll();
  }
  publicCollection<DelayedTask>getAllTasks(){
   returnCollections.unmodifiableCollection(queue);
  }
  publicintgetTaskQuantity(){
   returnqueue.size();
  }
  publicvoidrun(){
   while(!queue.isEmpty())
     try{
       queue.take().run();
     }catch(InterruptedExceptione){
       System.out.println("Interrupted");
     }
   System.out.println("FinishedDelayedTask");
  }
  publicstaticclassDelayedTaskimplementsDelayed,Runnable{
   privatestaticintcounter=0;
   privatefinalintid=counter++;
   privatefinalintdelta;
   privatefinallongtrigger;
   publicDelayedTask(intdelayInSeconds){
     delta=delayInSeconds;
     trigger=System.nanoTime()+NANOSECONDS.convert(delta,SECONDS);
   }
   publiclonggetDelay(TimeUnitunit){
     returnunit.convert(trigger-System.nanoTime(),NANOSECONDS);
   }
   publicintcompareTo(Delayedarg){
     DelayedTaskthat=(DelayedTask)arg;
     if(trigger<that.trigger)
       return-1;
     if(trigger>that.trigger)
       return1;
     return0;
   }
   publicvoidrun(){
     //runallthatyouwanttodo
     System.out.println(this);
   }
   publicStringtoString(){
     return"["+delta+"s]"+"Task"+id;
   }
  }
  publicstaticvoidmain(String[]args){
   Randomrand=newRandom();
   ExecutorServiceexec=Executors.newCachedThreadPool();
   DelayedTaskertasker=newDelayedTasker();
   for(inti=0;i<10;i++)
     tasker.addTask(newDelayedTask(rand.nextInt(5)));
   exec.execute(tasker);
   exec.shutdown();
  }
}
<p>
自己的整个学习思路完全被老师的讲课思路所牵制,这样几节课听下来,恐怕自己的见解都应该是书里的知识点了,根本谈不上自身发现问题,分析问题,和解决问题能力的切实提高。
兰色精灵 该用户已被删除
沙发
发表于 2015-1-24 15:53:11 | 只看该作者
Java是一种计算机编程语言,拥有跨平台、面向对java
飘飘悠悠 该用户已被删除
板凳
 楼主| 发表于 2015-2-4 14:33:53 | 只看该作者
Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)
小魔女 该用户已被删除
地板
发表于 2015-2-5 19:42:53 | 只看该作者
是一种将安全性(Security)列为第一优先考虑的语言
分手快乐 该用户已被删除
5#
发表于 2015-2-8 15:47:54 | 只看该作者
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
精灵巫婆 该用户已被删除
6#
发表于 2015-2-25 20:00:02 | 只看该作者
其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。
爱飞 该用户已被删除
7#
发表于 2015-3-4 04:31:11 | 只看该作者
是一种使网页(Web Page)产生生动活泼画面的语言
透明 该用户已被删除
8#
发表于 2015-3-10 20:37:48 | 只看该作者
《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。
莫相离 该用户已被删除
9#
发表于 2015-3-17 09:52:33 | 只看该作者
是一种语言,用以产生「小应用程序(Applet(s))
小女巫 该用户已被删除
10#
发表于 2015-3-24 06:10:27 | 只看该作者
《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 16:48

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表