Java中 循环thead.sleep和timer哪个效率高
时间: 2024-03-19 17:40:31 浏览: 67
在Java中,使用`Thread.sleep()`和`Timer`都可以实现定时循环的效果,但是它们的实现方式有所不同,因此效率也会有所区别。
`Thread.sleep()`方法是使当前线程暂停指定的时间,然后继续执行。这个方法的缺点是如果休眠时间设置的太长,会导致整个线程阻塞,其他任务也会受到影响。所以使用`Thread.sleep()`方法时需要谨慎。
`Timer`是一个基于时间的工具,可以用来定时执行任务。它会创建一个后台线程来执行任务,因此不会阻塞主线程。但是`Timer`的缺点是它只有一个后台线程,如果有多个任务同时需要执行,会导致任务之间的竞争,影响执行效率。
综上所述,如果仅需要简单的定时循环,`Thread.sleep()`可能更加简单高效。如果需要执行多个复杂的任务,或者需要更加精确的定时控制,建议使用`Timer`。当然,对于高级的任务调度和定时控制,还可以使用Quartz等专业的调度框架。
相关问题
java 多线程 子线程thead.sleep() 结果 sleep之后的代码没有执行 解决办法是什么
如果在子线程中使用了 `Thread.sleep()` 方法,会让该线程暂停执行一段时间。如果在 `sleep()` 方法后面的代码没有执行,可能是因为该子线程被主线程或其他线程中断了。
为了解决这个问题,可以在子线程中添加异常处理代码,来处理线程中断的情况。例如,在 `sleep()` 方法后面加上 `try-catch` 语句,捕获 `InterruptedException` 异常,然后在 `catch` 语句块中添加相应的处理代码,例如打印日志或者重新设置线程的中断标志。这样可以保证子线程在被中断后能够正常执行后续的代码。
优化这段代码import java.text.SimpleDateFormat; import java.Date.*; class Time implements Runnable throws InterruptedExpection { void run(); { while(ture) { SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println(sdf.sdf(new Date())); Tread.sleep(1000); } } } class Watch { public static void main(String[] args) { Thead tread=new Thead(new Timer()); tread.start(); } }
有几个错误需要修正:
1. `java.util.Date` 应该是 `import java.util.Date;` 而不是 `import java.Date.*;`
2. `void run();` 应该是 `public void run() { ... }`,缺少 `public` 和方法体的大括号。
3. `while(ture)` 应该是 `while(true)`,单词拼写错误。
4. `Tread.sleep(1000);` 应该是 `Thread.sleep(1000);`,单词拼写错误,`Thread` 是正确的类名。
修改后的代码如下:
```
import java.text.SimpleDateFormat;
import java.util.Date;
class Timer implements Runnable {
public void run() {
while (true) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(sdf.format(new Date()));
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class Watch {
public static void main(String[] args) {
Thread thread = new Thread(new Timer());
thread.start();
}
}
```
这个代码实现了一个计时器,每秒钟输出当前时间。其中 `Timer` 类实现了 `Runnable` 接口,用于在新线程中运行计时器逻辑;`Watch` 类则在主线程中创建并启动了一个新线程来运行计时器。修改后的代码可以正常运行,输出如下:
```
2021-06-22 13:03:31
2021-06-22 13:03:32
2021-06-22 13:03:33
2021-06-22 13:03:34
2021-06-22 13:03:35
...
```
阅读全文