Java中线程的挂起是一个非常重要的功能,可以用来实现诸如线程休眠、线程等待以及线程阻塞等操作。下面将从多个方面详细阐述Java中线程挂起的应用。
一、线程休眠
线程休眠是指让当前线程在指定的时间内暂停执行,通过Thread类的sleep()方法可以实现线程休眠。
public class SleepDemo {
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
System.out.println("当前线程:" + Thread.currentThread().getName() + " - " + i);
try {
Thread.sleep(1000);// 休眠1秒
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
在上面的代码中,我们使用sleep()方法让当前线程休眠1秒。这样执行下来,每隔1秒钟输出一行,就可以实现线程的休眠。
二、线程等待
线程等待是指让一个线程等待其他线程执行完毕再继续执行,通过Object类的wait()和notify()方法可以实现线程等待。
public class WaitDemo {
public static void main(String[] args) {
final Object lock = new Object();
new Thread(() -> {
synchronized (lock) {
System.out.println("线程1开始执行...");
try {
lock.wait();// 当前线程等待
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("线程1继续执行...");
}
}).start();
new Thread(() -> {
synchronized (lock) {
System.out.println("线程2开始执行...");
lock.notify();// 唤醒等待中的线程
System.out.println("线程2继续执行...");
}
}).start();
}
}
在上面的代码中,我们创建了两个线程,线程1会先执行,并且调用了wait()方法等待,然后线程2继续执行,并且调用了notify()方法唤醒等待中的线程1,线程1才继续执行。这样就实现了线程等待的功能。
三、线程阻塞
线程阻塞是指让当前线程暂停执行,等待某个条件发生后再继续执行的操作,通过Thread类的join()方法可以实现线程阻塞。
public class JoinDemo {
public static void main(String[] args) throws InterruptedException {
Thread thread1 = new Thread(() -> {
for (int i = 0; i < 10; i++) {
System.out.println("线程1:" + i);
}
});
Thread thread2 = new Thread(() -> {
for (int i = 0; i < 10; i++) {
System.out.println("线程2:" + i);
}
});
thread1.start();
thread2.start();
thread1.join();// 等待线程1执行完毕
thread2.join();// 等待线程2执行完毕
System.out.println("所有线程执行完毕!");
}
}
在上面的代码中,我们创建了两个线程(thread1和thread2),并且调用了它们的start()方法让它们开始执行。然后在主线程中调用了thread1.join()和thread2.join()方法,等待线程1和线程2执行完毕,才会输出“所有线程执行完毕!”。
四、总结
通过上面的介绍,我们可以看到Java中线程挂起的应用非常广泛,可以用来实现线程休眠、线程等待以及线程阻塞等操作。我们可以在编写多线程程序的时候根据实际的需求来选择合适的线程挂起方式。