Java中的暂停和继续

Java是一种面向对象的编程语言,具有高度可靠性和可移植性。在Java中,我们可以使用线程来实现并发执行的程序。线程是Java中的基本执行单元,可以独立运行并与其他线程并发执行。

在某些情况下,我们可能需要暂停和继续线程的执行。例如,当我们需要在执行过程中暂停线程以等待某些资源时,或者当我们想要按特定的顺序执行线程时,我们可以使用暂停和继续操作。

暂停线程的方法

Java中提供了几种方法来暂停线程的执行。

1. 使用Thread.sleep()

Thread.sleep()是Java中用于使当前线程暂停一段时间的方法。它接受一个以毫秒为单位的参数,并使当前线程休眠指定的时间。

以下是使用Thread.sleep()暂停线程执行的示例代码:

public class SleepExample implements Runnable {
    public void run() {
        System.out.println("Thread started");
        try {
            Thread.sleep(2000); // 暂停2秒
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("Thread resumed");
    }
    
    public static void main(String[] args) {
        Thread t = new Thread(new SleepExample());
        t.start();
    }
}

上述代码创建了一个SleepExample类,实现了Runnable接口。在run()方法中,我们通过调用Thread.sleep()方法暂停线程的执行2秒钟。然后,线程将继续执行并打印"Thread resumed"。

2. 使用wait()notify()

另一种暂停线程的方法是使用wait()notify()方法。这两个方法是Object类的成员方法,可以用于线程之间的通信。

wait()方法使当前线程进入等待状态,并释放对象的锁。notify()方法用于唤醒正在等待的线程。

以下是使用wait()notify()暂停和恢复线程执行的示例代码:

public class WaitNotifyExample {
    public static void main(String[] args) {
        final Object lock = new Object();
        
        // 线程1
        Thread t1 = new Thread(new Runnable() {
            public void run() {
                synchronized(lock) {
                    System.out.println("Thread 1 started");
                    try {
                        lock.wait(); // 等待其他线程的通知
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println("Thread 1 resumed");
                }
            }
        });
        
        // 线程2
        Thread t2 = new Thread(new Runnable() {
            public void run() {
                synchronized(lock) {
                    System.out.println("Thread 2 started");
                    try {
                        Thread.sleep(2000); // 暂停2秒
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    lock.notify(); // 通知等待的线程
                    System.out.println("Thread 2 finished");
                }
            }
        });
        
        t1.start();
        t2.start();
    }
}

上述代码创建了一个WaitNotifyExample类,其中包含两个线程t1t2。在t1线程中,我们使用wait()方法暂停线程的执行,并等待其他线程的通知。在t2线程中,我们使用Thread.sleep()方法暂停线程的执行2秒钟,然后通过notify()方法通知等待的线程,使其继续执行。

继续线程的方法

在Java中,线程的继续执行可以通过唤醒等待的线程来实现。

使用notify()notifyAll()

我们可以使用notify()方法来唤醒一个正在等待的线程,或使用notifyAll()方法来唤醒所有等待的线程。

以下是使用notify()方法继续线程执行的示例代码:

public class NotifyExample {
    public static void main(String[] args) {
        final Object lock = new Object();
        
        // 线程1
        Thread t1 = new Thread(new Runnable() {
            public void run() {
                synchronized(lock) {
                    System.out.println("Thread 1 started");
                    try {
                        lock.wait(); // 等待其他线程的通知