本文目录一览:
1、JAVA中 如何使用延迟? 2、怎样让“java”延迟函数? 3、java每天只能执行一个任务 4、java jar添加网络延迟 5、java程序偶尔停顿
JAVA中 如何使用延迟?
Java中主要有两种方法来实现延迟,即:Thread和Timer
1、普通延时用Thread.sleep(int)
方法,这很简单。它将当前线程挂起指定的毫秒数。如:
try {
Thread.currentThread().sleep(1000); // 毫秒
} catch (Exception e) {}
在这里需要解释一下线程沉睡的时间。sleep()
方法并不能够让程序"严格"的沉睡指定的时间。例如当使用5000作为sleep()
方法的参数时,线程可能在实际被挂起5000.001毫秒后才会继续运行。当然,对于一般的应用程序来说,sleep()
方法对时间控制的精度足够了。
2、但是如果要使用精确延时,最好使用Timer
类:
Timer timer = new Timer(); // 实例化Timer类
timer.schedule(new TimerTask() {
public void run() {
System.out.println("退出");
this.cancel();
}
}, 500); // 五百毫秒
这种延时比sleep
精确。上述延时方法只运行一次,如果需要运行多次,使用timer.schedule(new MyTask(), 1000, 2000);
则每间隔2秒执行MyTask()
。
怎样让“java”延迟函数?
Java中主要有以下方法来实现延迟:
普通延时用Thread.sleep(int)
方法,这很简单。它将当前线程挂起指定的毫秒数。如:
try {
Thread.currentThread().sleep(1000); // 毫秒
} catch (Exception e) {}
在这里需要解释一下线程沉睡的时间。sleep()
方法并不能够让程序"严格"的沉睡指定的时间。例如当使用5000作为sleep()
方法的参数时,线程可能在实际被挂起5000.001毫秒后才会继续运行。当然,对于一般的应用程序来说,sleep()
方法对时间控制的精度足够了。
Java是一门面向对象编程语言,不仅吸收了C语言的各种优点,还摒弃了C里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。
java每天只能执行一个任务
一、用java.util.Timer
使用JAVA类Timer
可实现简单的延迟和周期性任务,其中的任务使用java.util.TimerTask
表示。任务的执行方式有两种:
- 按固定速率执行:即
scheduleAtFixedRate
的两个重载方法
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
System.out.println("Timer is running");
}
}, 2000, 5000);
- 按固定延迟执行:即
schedule
的4个重载方法
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("Timer is running");
}
}, 2000);
我们要实现一个定时任务,只需要实现TimerTask
的run
方法即可。每一个任务都有下一次执行时间nextExecutionTime
(毫秒),如果是周期性的任务,那么每次执行都会更新这个时间为下一次的执行时间,当nextExecutionTime
小于当前时间时,都会执行它。
Timer的缺陷
1、由于执行任务的线程只有一个,所以如果某个任务的执行时间过长,那么将破坏其他任务的定时精确性。如一个任务每1秒执行一次,而另一个任务执行一次需要5秒,那么如果是固定速率的任务,那么会在5秒这个任务执行完成后连续执行5次,而固定延迟的任务将丢失4次执行。
2、如果执行某个任务过程中抛出了异常,那么执行线程将会终止,导致Timer
中的其他任务也不能再执行。
3、Timer
使用的是绝对时间,即是某个时间点,所以它执行依赖系统的时间,如果系统时间修改了的话,将导致任务可能不会被执行。
二、使用ScheduledThreadPoolExecutor
由于Timer
存在上面说的这些缺陷,在JDK1.5中,我们可以使用ScheduledThreadPoolExecutor
来代替它,使用Executors.newScheduledThreadPool
工厂方法或使用ScheduledThreadPoolExecutor
的构造函数来创建定时任务,它是基于线程池的实现,不会存在Timer
存在的上述问题,当线程数量为1时,它相当于Timer
。
ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);
scheduledThreadPool.schedule(new Runnable() {
public void run() {
System.out.println("delay 3 seconds");
}
}, 3, TimeUnit.SECONDS);
scheduledThreadPool.scheduleAtFixedRate(() -> System.out.println("delay 1 seconds, and execute every 3 seconds"), 1, 3, TimeUnit.SECONDS);
java jar添加网络延迟
影响性能问题也有网络,网络问题时不时的都会发生,如路由器、交换机和DNS服务器失败。更常见的是在一个高度分散的IT环境中定期或间歇性延迟。 间歇或定期的延迟会触发一些重要的性能问题,以不同的方式影响JavaEE应用程序。 因为大量的fetch迭代(网络传入和传出),涉及大数据集的数据查询问题的应用会非常受网络延迟的影响。 应用程序在处理外部系统大数据负载(例如XML数据)时也会很受网络延迟的影响,会在发送和接收响应时产生巨大的响应间隔。 JavaEE容器复制过程(集群)也会受到影响,并且会让故障转移功能(如多播或单播数据包损失)处于风险中。 JDBC行数据“预取”、XML数据压缩和数据缓存可以减少网络延迟。在设计一个新的网络拓扑时,应该仔细检查这种网络延迟问题。
java程序偶尔停顿
1、系统响应时间跟不上java的运行速率。 2、CPU的运算能力不够,跟不上java计算。 3、网络延迟,导致Java程序崩溃,造成的卡顿。