Javaを使って1つのプログラムを編纂して、3つのスレッドを起動して、3つのスレッドのIDはそれぞれA、B、Cです;各スレッドは自分のID値を画面に5回、印刷順はABCABC…

3279 ワード

初心者として、ここの大神は多くのことを書いて分からないので、この問題はいくつかの簡単な考え方で解決することができます.
3つのスレッドクラスを直接作成し、別のクラスで接続してから、クラスオープンスレッドをテストします.
//         ,   num        A B C:
public class Name {
    int num=0;
}
//  A  :

public   class PrintA implements Runnable{
    Name n;
    public PrintA(){}
    public PrintA(Name n){
        this.n=n;
    }

    public void run() {
        // TODO Auto-generated method stub
        int count=0;
        while(count<5){
            synchronized (n) {
                try{
                    Thread.sleep(100);
                }catch(InterruptedException e1){
                    e1.printStackTrace();
                }
                if(n.num==0){
                    System.out.println("A");
                    count++;
                    n.num=1;
                    n.notifyAll();
                    try {
                        n.wait();
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
        }
    }
}

//  B  

public class PrintB implements Runnable{
    Name n;
    public PrintB(){}
    public PrintB(Name n){
        this.n=n;
    }
    public void run(){
        int count=0;
        while(count<5){
            synchronized (n) {
                try{
                    Thread.sleep(100);
                }catch(InterruptedException e1){
                    e1.printStackTrace();
                }
                if(n.num==1){
                    System.out.println("B");
                    count++;
                    n.num=2;
                    n.notifyAll();
                    try {
                        n.wait();
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
        }
    }
}

//  C  

public class PrintC implements Runnable{
    Name n;
    public PrintC(){}
    public PrintC(Name n){
        this.n=n;
    }
    public void run(){
        int count=0;
        while(count<5){
            synchronized (n) {
                try{
                    Thread.sleep(100);
                }catch(InterruptedException e1){
                    e1.printStackTrace();
                }
                if(n.num==2){
                    System.out.println("C");
                    count++;
                    n.num=0;
                    n.notifyAll();
                    try {
                        n.wait();
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
        }
    }
}

//   

public class Test {
    public static void main(String[] args) {
        Name n=new Name();
    
        PrintA pa=new PrintA(n);
        PrintB pb=new PrintB(n);
        PrintC pc=new PrintC(n);
        
        Thread th1=new Thread(pa);
        Thread th2=new Thread(pb);
        Thread th3=new Thread(pc);
        
        th1.start();
        th2.start();
        th3.start();
    }
    
}