在序列 java 中运行 3 个线程
2022-09-03 13:44:25
						我有3个线程 第一次打印 A 第二次打印 B 第三次打印 C
我想按顺序打印 A B C A B C A B C 等等.....
所以我写了下面的程序,但我无法实现同样的目标。我意识到一个问题,当状态=1时,例如B1和C1线程正在等待,当我通知All()时,等待线程都会唤醒,并且根据CPU分配,它可能会打印B或C。
在这种情况下,我只想在A之后打印B。
我需要做什么修改。
public class NotifyAllExample {
    int status=1;
    public static void main(String[] args) {
        NotifyAllExample notifyAllExample = new NotifyAllExample();
        A1 a=new A1(notifyAllExample);
        B1 b=new B1(notifyAllExample);
        C1 c=new C1(notifyAllExample);
        a.start();
        b.start();
        c.start();
    }
}
class A1 extends Thread{
    NotifyAllExample notifyAllExample;
    A1(NotifyAllExample notifyAllExample){
        this.notifyAllExample = notifyAllExample;
    }
    @Override
    public void run() {
        try{
            synchronized (notifyAllExample) {
                for (int i = 0; i < 100; i++) {
                    if(notifyAllExample.status!=1){
                        notifyAllExample.wait();
                    }
                    System.out.print("A ");
                    notifyAllExample.status = 2;
                    notifyAllExample.notifyAll();
                }
            }
        }catch (Exception e) {
            System.out.println("Exception 1 :"+e.getMessage());
        }
    }
}
class B1 extends Thread{
    NotifyAllExample notifyAllExample;
    B1(NotifyAllExample notifyAllExample){
        this.notifyAllExample = notifyAllExample;
    }
    @Override
    public void run() {
        try{
            synchronized (notifyAllExample) {
                for (int i = 0; i < 100; i++) {
                    if(notifyAllExample.status!=2){
                        notifyAllExample.wait();
                    }
                    System.out.print("B ");
                    notifyAllExample.status = 3;
                    notifyAllExample.notifyAll();
                }
            }
        }catch (Exception e) {
            System.out.println("Exception 2 :"+e.getMessage());
        }
    }
}
class C1 extends Thread{
    NotifyAllExample notifyAllExample;
    C1(NotifyAllExample notifyAllExample){
        this.notifyAllExample = notifyAllExample;
    }
    @Override
    public void run() {
        try{
            synchronized (notifyAllExample) {
                for (int i = 0; i < 100; i++) {
                    if(notifyAllExample.status!=3){
                        notifyAllExample.wait();
                    }
                    System.out.print("C ");
                    notifyAllExample.status = 1;
                    notifyAllExample.notifyAll();
                }
            }
        }catch (Exception e) {
            System.out.println("Exception 3 :"+e.getMessage());
        }
    }
}