Player1 と player2 という名前の 2 つのスレッド クラスがあります。
両方のプレーヤーが完了したら、両方のプレーヤーのスコアを要約する必要があります。
何よりも、すべての作業を完了しましたが、すべてのプレーヤーが完了するまでメイン スレッド (プレーヤーの概要を出力するため) を待機させることができませんでした。
これは私のJavaプログラムです...
class Player1 extends Thread
{
private Object o;
int total=0;
Player1 (Object o)
{
this.o = o;
}
public void run()
{
System.out.println(Thread.currentThread().getName()+
" is running now...");
for(int i=0;i<10;i++)
{
++total ;
}
System.out.println(this.getName()+" is "+total+
" Run! and finished ");
synchronized (o)
{
o.notify();
}
}
}
class Player2 extends Thread
{
private Object o;
int total=0;
Player2 (Object o)
{
this.o = o;
}
public void run()
{
try
{
synchronized (o)
{
o.wait();
}
}
catch (Exception e)
{
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+
" is running now");
for(int i=0;i<15;i++)
{
++total ;
}
System.out.println(this.getName()+" is "+total+
" Run! and finished ");
}
}
public class MultiThreading
{
public static void main(String[] args)
{
Object lock= new Object();
Player1 Amir=new Player1(lock);
Amir.setName("Amir");
Player2 Hossein=new Player2(lock);
Hossein.setName("Hossein");
Amir.start();
Hossein.start();
System.out.println("Amir Score is :"+Amir.total);
System.out.println("Hossein Score is :"+Hossein.total);
}
}
出力は次のとおりです。
Amir Score is :0
Hossein Score is :0
Amir is running now...
Amir is 10 Run! and finished
Hossein is running now
Hossein is 15 Run! and finished
私の出力では、プレイヤーが実際にゲームを開始する前に、ゲームの概要がメインスレッドによって出力されます (Amir Score は :0、Hossein Score は :0)。 Thread.Sleep(3000) を使用でき、答えは正しいです。それは良い方法ではないと思います...
これについて教えてください...
貴重なご回答をお待ちしております...