【训练1】球员入场
足球比赛开赛前,A、B两队的上场球员(每队各11名球员)会依次出现在两个半场处。受球场条件限制,球员通道口每次只能通过一名球员,使用Thread类,模拟球员入场情景。
方法一:
/*【训练1】球员入场
* 足球比赛开赛前,A、B两队的上场球员(每队各11名球员)会依次出现在
* 两个半场处。受球场条件限制,球员通道口每次只能通过一名球员,使用
* Thread类,模拟球员入场情景。
* */
package dxc;
public class Xl1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("A、B两队球员开始入场……");
A a = new A();
a.start();
B b = new B();
b.start();
}
}
class A extends Thread{
public void run() {
for(int i = 1;i < 12;i++) {
System.out.println("A队" + i + "号球员入场");
}
}
}
class B extends Thread{
public void run() {
for(int i = 1;i < 12;i++) {
System.out.println("B队" + i + "号球员入场");
}
}
}
缺点:
- 方法一定义两个线程对象,由于两个线程对象竞争CPU资源,会出现A队成员和B队成员进场混乱的情况。
- 方法二只定义了一个线程对象,则不会出现方法一的情况,两队队员分别按先A队,后B队的次序进场。缺点是与现实情况不完全符合。
方法二:
/*【训练1】球员入场
* 足球比赛开赛前,A、B两队的上场球员(每队各11名球员)会依次出现在两个半场处。
* 受球场条件限制,球员通道每次只能通过一名球员,使用Thread类,模拟球员入场
* 的场景。
* */
package dxc;
public class xl1 {
public xl1() {
Thread t = new Thread() {
public void run() {
System.out.println("A队队员开始进场:");
for(int i = 1;i < 12;i++) {
System.out.println(" A队的" + i + "号球员进场。");
}
System.out.println("B队队员开始进场:");
for(int i = 1;i < 12;i++) {
System.out.println(" B队的" + i + "号球员进场。");
}
}
};
t.start();
}
public static void main(String[] args) {
// TODO Auto-generated method stub
new xl1();
}
}