Java线程的休眠与唤醒

在Java编程中,线程是一种重要的概念,它允许我们同时执行多个任务,实现多线程编程的关键是控制线程的休眠和唤醒。本文将介绍Java线程的休眠和唤醒的基本概念,并提供一些示例代码来帮助读者更好地理解这个概念。

线程休眠

在某些情况下,我们希望让线程在一段时间内暂停执行,这时我们可以使用线程的休眠功能。Java中的Sleep()方法可以用来使线程休眠一段时间。

示例代码:

Text
public class SleepThreadExample extends Thread {
    public void run() {
        for (int i = 0; i < 5; i++) {
            System.out.println("线程" + Thread.currentThread().getId() + "执行操作" + i);
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
public class Main {
    public static void main(String[] args) {
        SleepThreadExample thread1 = new SleepThreadExample();
        SleepThreadExample thread2 = new SleepThreadExample();
        thread1.start();
        thread2.start();
    }
}

在上面的示例代码中,我们创建了两个SleepThreadExample对象,然后分别启动了这两个线程。在run()方法中,每个线程都会执行5次操作,并在每次操作之间休眠1秒钟。

当我们运行这段代码时,可以看到两个线程交替执行,每个线程都在执行完一个操作后休眠1秒钟。

线程唤醒

除了让线程休眠一段时间外,我们还可以使用线程的唤醒功能来控制线程的执行。Java中的wait()和notify()方法可以用来实现线程的唤醒。

示例代码:

Text
public class WaitNotifyExample {
    public void doSomething() {
        synchronized (this) {
            System.out.println("线程" + Thread.currentThread().getId() + "开始执行操作");
            try {
                wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("线程" + Thread.currentThread().getId() + "继续执行操作");
        }
    }
    public void wakeUp() {
        synchronized (this) {
            notify();
        }
    }
}
public class Main {
    public static void main(String[] args) {
        WaitNotifyExample example = new WaitNotifyExample();
        Thread thread1 = new Thread(new Runnable() {
            public void run() {
                example.doSomething();
            }
        });
        Thread thread2 = new Thread(new Runnable() {
            public void run() {
                example.wakeUp();
            }
        });
        thread1.start();
        thread2.start();
    }
}

在上面的示例代码中,我们创建了一个WaitNotifyExample对象,然后创建了两个线程,在一个线程中调用了doSomething()方法,在另一个线程中调用了wakeUp()方法。

在doSomething()方法中,线程开始执行某个操作,然后调用wait()方法进入等待状态,直到其他线程调用notify()方法唤醒它。

在wakeUp()方法中,我们使用synchronized关键字确保在调用notify()方法时锁定对象。

运行这段代码时,可以看到线程1在执行doSomething()方法时被唤醒,并继续执行操作。

通过以上示例,我们可以清楚地了解Java线程的休眠与唤醒的基本概念和使用方法。合理地控制线程的休眠和唤醒,可以提高程序的执行效率和灵活性。