来看Java中准时启动线程
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>
自己的整个学习思路完全被老师的讲课思路所牵制,这样几节课听下来,恐怕自己的见解都应该是书里的知识点了,根本谈不上自身发现问题,分析问题,和解决问题能力的切实提高。 Java是一种计算机编程语言,拥有跨平台、面向对java Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading) 是一种将安全性(Security)列为第一优先考虑的语言 是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言 其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。 是一种使网页(Web Page)产生生动活泼画面的语言 《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。 是一种语言,用以产生「小应用程序(Applet(s)) 《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。
页:
[1]