Java多线程教程:Thread中的sleep方法
原创大约 2 分钟
Java多线程教程:Thread中的sleep方法
Java中的sleep
方法用于暂停当前线程的执行指定时间。该方法属于Thread
类,允许临时挂起线程而不终止它。sleep
方法可能抛出InterruptedException
,因此必须使用try-catch
块处理。
目录
- sleep方法变体
- 使用
sleep(long millis)
方法示例 - 使用
sleep(long millis, int nanos)
方法示例 - 处理
InterruptedException
- 结论
1. sleep方法变体
sleep(long millis)
暂停当前线程执行指定毫秒数。
public static void sleep(long millis) throws InterruptedException
sleep(long millis, int nanos)
暂停当前线程执行指定毫秒数+纳秒数。
public static void sleep(long millis, int nanos) throws InterruptedException
sleep(long millis)
方法示例
2. 使用class MyThread extends Thread {
public MyThread(String name) {
super(name); // 设置线程名称
}
@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getName() + "正在运行,迭代次数:" + i);
try {
Thread.sleep(1000); // 休眠1000毫秒(1秒)
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
MyThread thread1 = new MyThread("线程-1");
MyThread thread2 = new MyThread("线程-2");
thread1.start(); // 启动线程1
thread2.start(); // 启动线程2
}
}
输出:
线程-1正在运行,迭代次数:0
线程-2正在运行,迭代次数:0
线程-1正在运行,迭代次数:1
线程-2正在运行,迭代次数:1
...(后续每隔1秒输出一次)
sleep(long millis, int nanos)
方法示例
3. 使用class MyThread extends Thread {
public MyThread(String name) {
super(name);
}
@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getName() + "正在运行,迭代次数:" + i);
try {
// 休眠1000毫秒+500000纳秒(0.5毫秒)
Thread.sleep(1000, 500000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
MyThread thread1 = new MyThread("线程-1");
MyThread thread2 = new MyThread("线程-2");
thread1.start();
thread2.start();
}
}
输出:
线程-1正在运行,迭代次数:0
线程-2正在运行,迭代次数:0
...(后续每隔1.0005秒输出一次)
InterruptedException
4. 处理class MyThread extends Thread {
public MyThread(String name) {
super(name);
}
@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getName() + "正在运行,迭代次数:" + i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
System.out.println(Thread.currentThread().getName() + "被中断!");
return; // 中断后退出run方法
}
}
}
public static void main(String[] args) {
MyThread thread1 = new MyThread("线程-1");
thread1.start();
try {
Thread.sleep(3000); // 主线程休眠3秒
thread1.interrupt(); // 中断线程1
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
输出:
线程-1正在运行,迭代次数:0
线程-1正在运行,迭代次数:1
线程-1正在运行,迭代次数:2
线程-1被中断!
5. 结论
Java的sleep
方法用于控制线程执行流程。通过sleep(long millis)
和sleep(long millis, int nanos)
方法,可精确控制线程暂停时间。处理InterruptedException
至关重要,确保程序能优雅处理中断。