在多线程程序中,标志是一种常见的方式来控制线程的同步。例如,在一个多线程程序中,可能需要一些线程在某些条件下暂停执行,等待其他线程完成某些操作后再继续执行。可以使用标志来实现此功能。然而,由于多个线程可以同时访问标志,因此需要对标志进行线程同步,以避免发生竞争条件和其他问题。
以下是一个示例代码,实现了使用标志来暂停和恢复线程的执行:
class MyThread extends Thread {
private volatile boolean flag = true;
public void run() {
while (flag) {
// do something
}
}
public void stopThread() {
this.flag = false;
}
public void resumeThread() {
this.flag = true;
}
}
public class Main {
public static void main(String[] args) {
MyThread t = new MyThread();
t.start();
// do something
t.stopThread();
// do something
t.resumeThread();
// do something
}
}
在上面的示例中,MyThread 类中的 flag
用于控制线程的执行。stopThread()
方法用于暂停线程的执行,而 resumeThread()
方法用于恢复线程的执行。 volatile
关键字用于确保线程之间对 flag
的可见性。在 Main
类中,可以通过调用 stopThread()
和 resumeThread()
方法来控制线程的执行。
需要注意的是,在实际使用中,多个线程之间对标志的访问必须进行线程同步,以确保同一时刻只有一个线程可以修改标志的值。常用的线程同步方法包括 synchronized 块和 Lock 对象。