Javaを使って1つのプログラムを編纂して、3つのスレッドを起動して、3つのスレッドのIDはそれぞれA、B、Cです;各スレッドは自分のID値を画面に5回、印刷順はABCABC…
3279 ワード
初心者として、ここの大神は多くのことを書いて分からないので、この問題はいくつかの簡単な考え方で解決することができます.
3つのスレッドクラスを直接作成し、別のクラスで接続してから、クラスオープンスレッドをテストします.
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();
}
}