- 浏览: 153197 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
hardPass:
貌似二分法,没有一个合并的过程
简单_分治算法 -
zhufeng1981:
讲解的不错,支持一下。
简单_分治算法 -
a346063587:
嗯。。的确,基础很重要!
关于递归和尾递归的原理 -
zhufeng1981:
huoyj 写道基础很重要,这是永远不变的真理。 很赞同这句话 ...
关于递归和尾递归的原理 -
huoyj:
基础很重要,这是永远不变的真理。 很赞同这句话
关于递归和尾递归的原理
Timer里面的任务如果执行时间太长,会独占Timer对象,使得后面的任务无法几时的执行
ScheduledExecutorService不会出现Timer的问题(除非你只搞一个单线程池的任务区)
Timer搞了一个最小堆,每次取距离当前时间最近的那个任务来执行,
创建Timer的时间会创建TimerThread做为执行线程,所以一个Timer对应一个线程
,一个线程当然不能同时执行多个任务啦(当某个任务执行时间很长就看的出来)。
当你创建一个Timer的时候就创建了一个执行任务的线程对象,不管你有多少个任务要执行,都只有这一个线程来负责执行任务,它每次从最小堆中取距离当前时间最短的任务来执行,所以如果某个任务非常耗时,那这是不明智的。所以建议这样的情况使用jdk1.5提供的线程池任务管理器。
Timer的任务队列是个最小堆java.util.TaskQueue
ScheduledExecutorService不会出现Timer的问题(除非你只搞一个单线程池的任务区)
Timer搞了一个最小堆,每次取距离当前时间最近的那个任务来执行,
创建Timer的时间会创建TimerThread做为执行线程,所以一个Timer对应一个线程
,一个线程当然不能同时执行多个任务啦(当某个任务执行时间很长就看的出来)。
public Timer(String name, boolean isDaemon) { thread.setName(name); thread.setDaemon(isDaemon); thread.start(); }
当你创建一个Timer的时候就创建了一个执行任务的线程对象,不管你有多少个任务要执行,都只有这一个线程来负责执行任务,它每次从最小堆中取距离当前时间最短的任务来执行,所以如果某个任务非常耗时,那这是不明智的。所以建议这样的情况使用jdk1.5提供的线程池任务管理器。
class TimerThread extends Thread{}
Timer的任务队列是个最小堆java.util.TaskQueue
package thread.timer; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Timer; import java.util.TimerTask; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; public class Demo1 { public static void main(String[] args) throws ParseException, InterruptedException { /* * Timer里面的任务如果执行时间太长,会独占Timer对象,使得后面的任务无法几时的执行 * ScheduledExecutorService不会出现Timer的问题(除非你只搞一个单线程池的任务区) * * Timer搞了一个最小堆,每次取距离当前时间最近的那个任务来执行, * 创建Timer的时间会创建TimerThread做为执行线程,所以一个Timer对应一个线程 * ,一个线程当然不能同时执行多个任务啦(当某个任务执行时间很长就看的出来)。 * ScheduledExecutorService创建的线程数量是池子的大小,所以不会出现Timer那样的问题 */ // ScheduledExecutorServiceDemo(); // timerDemo(); // Date df = DateFormat.getDateTimeInstance().parse("2011-10-10"); // System.out.println(df.); // SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // String s = sdf.format(new Date()); // System.out.println(s); // convert(s, "yyyy-MM-dd HH:mm:ss"); // say(); ScheduledExecutorService pool = Executors .newSingleThreadScheduledExecutor(); final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // pool.scheduleAtFixedRate(new Runnable() { // public void run() { // System.out.println(sdf.format(new Date())); // } // },0, 1000,TimeUnit.MILLISECONDS); // pool.schedule(new Runnable() { // public void run() { // System.out.println(sdf.format(new Date())); // } // }, 1000, TimeUnit.MILLISECONDS); // pool.shutdown(); Date d1 = new Date(); Date d2 = new Date(); d2.setTime(d2.getTime()-1); System.out.println(d1.getTime()); System.out.println(d2.getTime()); System.out.println(d1.equals(d2)); System.out.println(d1.compareTo(d2)); } private static long convert(String time, String format) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat(format); // Date sdf = DateFormat.getDateTimeInstance().parse(time); long millionSeconds = sdf.parse(time).getTime(); return millionSeconds; // System.out.println(System.currentTimeMillis()); // System.out.println(millionSeconds); } private static void say() throws ParseException { ScheduledExecutorService pool = Executors .newSingleThreadScheduledExecutor(); long start = System.currentTimeMillis(); System.out.println("当前时间:"+start); long deply = convert("2011-10-09 15:49:00", "yyyy-MM-dd HH:mm:ss")-start; System.out.println(deply+"秒后执行"); // System.out.println(86268719/3600/1000); pool.schedule(new Runnable() { public void run() { while (true) { System.out.println("1"); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } }, deply, TimeUnit.MILLISECONDS); } private static void ScheduledExecutorServiceDemo() { ScheduledExecutorService pool = Executors .newSingleThreadScheduledExecutor(); pool.schedule(new Runnable() { public void run() { while (true) { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("1"); break; } } }, 1000, TimeUnit.MILLISECONDS); pool.schedule(new Runnable() { public void run() { System.out.println("2"); } }, 3000, TimeUnit.MILLISECONDS); } private static void timerDemo() { Timer timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { while (true) { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("1"); } } }, 100, 2000); timer.schedule(new TimerTask() { @Override public void run() { System.out.println("2"); } }, 1000, 1000); } }
发表评论
-
高效编写JAVA代码的几条建议(转)
2011-11-23 20:34 1369(1) 类名首字母应该大写 ... -
java正则表达式及java.util.regex包的学习
2011-11-16 22:34 24777没有事做,就会堕落。。 这个世界有太多的浮躁,要耐得住诱惑; ... -
quartz的配置(转自网络)
2011-11-16 20:18 1207周允许的是1-7 其中1 ... -
[转自网络]freeMarker的常用语法(以后可能会用到)
2011-11-16 09:48 1215常用语法 EG.一个对象BOOK 1.输出 $…{book ... -
开源定时器quartz入门
2011-11-15 20:03 4879闲来无事学习了下quartz框架,其实JAVA下的定时器框架还 ... -
freeMarker入门
2011-11-14 22:26 1548freeMarker是一个 JAVA开源模版引擎 下面以创建 ... -
java.util.logging包的学习
2011-11-11 22:07 1346package sunfa.lx; import jav ... -
mybatis中的一个OOXX
2011-11-08 15:11 1244mybatis : mybatis XML中执行多条语句: ... -
java io流之 装饰模式
2011-10-05 21:41 1156初学java.io的时候容易被众多的IO类搞晕头,其实java ... -
java nio学习笔记<一>
2011-10-05 21:04 1094package nio; import java.i ... -
java.util.concurrent.atomic.*包的体会
2011-10-01 18:10 1469java.util.concurrent.atomic.*包的 ... -
计算很大数组中List的和
2011-09-30 19:45 1080原帖地址: http://www.iteye.com/topi ... -
CountDownLatch、CyclicBarrier让多线程变得更简单
2011-09-29 16:54 1108CountDownLatch 一个同步辅助类,在完成一组正在其 ... -
山寨同步队列 VS 官方BT的ArrayBlockingQueue ,结果官方落马!!!
2011-09-29 15:30 1034官方的java.util.concurrent.ArrayBl ... -
突然发现自己的JAVA基础很差
2011-09-25 11:50 1168今天因为一个问题上网搜索却牵扯出了另一个问题。。。纠结。、、还 ... -
java_Comparable & Comparator
2011-09-21 23:21 1442java有2个非常重要的排序接口:java.lang.Comp ... -
tomcat,jboss部署方式(热部署)
2011-06-26 16:08 2840tomcat: 1、直接把项目web文件夹放在webapps里 ... -
JAVA书籍(IO多线程等)
2011-05-29 15:47 1015留下这些书,纪念我曾经走过的路。 -
java IO的学习总结
2011-05-29 15:31 10521、JAVA中的IO流分字节流和字符流 2、InputStre ... -
关于JAVA3D游戏(摘自网络)
2011-01-02 16:56 23932006年8月,我们终于决定用计算机三维视觉游戏机制制作自己的 ...
相关推荐
Java并发编程是Java编程中一个非常重要的方面,java.util.Timer是Java中的一个基本组件,用于实现延时和周期性任务的执行。但是,Timer存在一些缺陷,如创建唯一的线程来执行所有Timer任务,如果一个timer任务的执行...
在这个实例中,我们将探讨`Timer`类的主要用法和相关概念。 首先,`Timer`类创建了一个定时器对象,它可以调度`TimerTask`实例的执行。`TimerTask`是Java中的一个抽象类,你需要创建它的子类并重写`run()`方法来...
总之,`Timer`和`TimerTask`在Java和Android开发中提供了一种简单的方式来安排未来的任务执行。但是,在实际的Android应用开发中,我们需要根据具体需求选择合适的定时器实现方式,以达到最佳性能和稳定性。理解各种...
在Java编程语言中,`Timer`和`TimerTask`是两个重要的类,它们用于调度周期性的任务执行。这两个类属于`java.util`包,提供了在后台线程中延迟执行任务或者定期执行任务的能力,这对于创建定时任务或者实现定时器...
在Java编程语言中,`Timer`和`TimerTask`是两个关键类,它们构成了一个简单但功能强大的任务调度系统,可以用于执行周期性或者延迟的任务。`Timer`类是一个线程,它负责调度和执行`TimerTask`实例。`TimerTask`则是...
在Java编程语言中,`java.util.Timer` 和 `java.util.TimerTask` 类是用于执行定期或延时任务的核心组件。它们允许开发者在指定的时间间隔内执行特定的操作,这对于实现定时任务,如定时备份、轮询服务或者执行周期...
1. Java:Java提供java.util.Timer和java.util.concurrent.Timer类,以及ScheduledExecutorService接口来实现定时任务。 2. Python:Python的time模块提供了简单的计时功能,而threading模块则提供了更复杂的定时器...
除了`java.util.Timer`,Java 5引入了`java.util.concurrent.ScheduledExecutorService`,它提供了更高级的定时任务调度功能,如精确的定时、定时周期的调整以及更灵活的并发控制。 总结起来,这个项目使用了Java...
在Java编程语言中,`TimerTask`和`Timer`是两个关键类,它们用于实现定时任务和调度。这两个类在处理需要定期执行的任务时非常有用,例如数据刷新、任务调度或者周期性的系统检查等。本篇文章将深入探讨`TimerTask`...
在多线程环境下,推荐使用`java.util.concurrent.ScheduledExecutorService`,它提供了更高级的线程管理和调度功能,比如支持并发控制、延迟执行和精确的定时任务。 在实际应用中,定时任务常用于数据库备份、数据...
在游戏开发和需要定时事务处理的场景中,`Timer`的使用显得尤为重要。`sample-Timer.rar`提供的示例代码展示了如何在Java ME环境中有效地利用`Timer`进行编程。 `Timer`类位于`javax.microedition.util`包下,它...
在本文中,我们将深入探讨`Timer`类的工作原理、常用方法以及如何使用它来创建和管理定时任务。 `Timer`类主要用于计划在将来某个时间点执行的任务,这通常通过`TimerTask`类来实现,`TimerTask`是实现了`Runnable`...
ScheduledExecutorService 是一个接口,用于管理和执行延迟或周期性的任务。它提供了多种方法来执行任务,如 scheduleAtFixedRate、scheduleWithFixedDelay 等。ScheduledExecutorService 可以用来实现各种定时任务...
在Android应用开发中,合理使用`Timer`能够帮助我们实现很多实用的功能,但同时也要注意其潜在的问题,如线程安全和性能影响。在设计系统时,应根据具体需求选择最适合的定时器实现,以确保应用的稳定性和效率。
在本文中,我们将深入探讨`Timer`类的基本使用和示例,帮助你理解如何在Java程序中实现简单的定时任务。 首先,`Timer`类提供了计划任务的能力,它可以按照预定的时间间隔安排任务执行。创建一个`Timer`对象后,你...
4. **替代方案**:考虑到`Timer`和`TimerTask`的一些限制,Java 5引入了`ScheduledExecutorService`,它提供了一套更强大且线程安全的定时任务调度接口。在新的项目中,通常推荐使用`ScheduledExecutorService`而...
这个类是Java早期版本中对定时任务管理的一个重要实现,尽管在Java 5之后,`java.util.concurrent`包中的`ScheduledExecutorService`被推荐使用,但`Timer`仍然在很多场景下被广泛采用。 `Timer`类主要有两个核心...
在这种情况下,`java.util.Timer` 和 `java.util.TimerTask` 类提供了非常有用的机制来实现周期性任务。本文将深入探讨这两个类的使用方法及其相关知识点。 首先,`Timer` 类是一个线程类,它负责调度任务的执行。...
Timer类提供了计划任务的方法,如`schedule(TimerTask task, long delay)`和`schedule(TimerTask task, Date firstTime, long period)`。这些方法可以用来安排一个`TimerTask`实例在未来某一时刻或以一定间隔重复...
如精度不够高,且当`Timer`关联的线程被中断或抛出未捕获异常时,整个`Timer`会被取消,因此在Java 5及更高版本中,通常推荐使用`ScheduledExecutorService`替代`Timer`,它可以提供更灵活和可控的定时任务管理。...