我这样写了一个 线程的题目public class Thread4 {
public static void main(String[] args) {
Chuangkou c1 = new Chuangkou(1);
Chuangkou c2 = new Chuangkou(2);
Chuangkou c3 = new Chuangkou(3);
Chuangkou c4 = new Chuangkou(4);
c1.start();
c2.start();
c3.start();
c4.start();
}
}class Chuangkou extends Thread {
private int a; public Chuangkou(int a) {
this.a = a;
} public synchronized void run() {
int s;
for (s = 1; s < 100;) {
if (a == 1) { System.out.println("第" + s + "张票,1号窗口出售");
s++; } else if (a == 2) { System.out.println("第" + s + "张票,2号窗口出售");
s++;
} else if (a == 3) { System.out.println("第" + s + "张票,3号窗口出售");
s++;
} else if (a == 4) { System.out.println("第" + s + "张票,4号窗口出售");
s++;
}
}
}}但是这样会 卖的很乱 怎么样才可以实现 4个窗口 卖一共100张票呢 比较迷茫 这个线程应该怎么写
public static void main(String[] args) {
Chuangkou c1 = new Chuangkou(1);
Chuangkou c2 = new Chuangkou(2);
Chuangkou c3 = new Chuangkou(3);
Chuangkou c4 = new Chuangkou(4);
c1.start();
c2.start();
c3.start();
c4.start();
}
}class Chuangkou extends Thread {
private int a; public Chuangkou(int a) {
this.a = a;
} public synchronized void run() {
int s;
for (s = 1; s < 100;) {
if (a == 1) { System.out.println("第" + s + "张票,1号窗口出售");
s++; } else if (a == 2) { System.out.println("第" + s + "张票,2号窗口出售");
s++;
} else if (a == 3) { System.out.println("第" + s + "张票,3号窗口出售");
s++;
} else if (a == 4) { System.out.println("第" + s + "张票,4号窗口出售");
s++;
}
}
}}但是这样会 卖的很乱 怎么样才可以实现 4个窗口 卖一共100张票呢 比较迷茫 这个线程应该怎么写
int n = 100;// 默认票数为100 public ChuangKo(int n) {
this.n = n;// 传递入票数
} public ChuangKo() {
} public void run() {
while (n > 0) {
System.out
.println(Thread.currentThread().getName() + "卖出票号:" + n--);
try {
Thread.sleep(new java.util.Random().nextInt(500) + 500);// 纯程停顿一段时间,有利于看到售票的效果
} catch (Exception e) {
}
}
}
}class Test {
public static void main(String[] args) {
ChuangKo c = new ChuangKo(200);
new Thread(c).start();
new Thread(c).start();
new Thread(c).start();
new Thread(c).start();
try {
Thread.currentThread().join();// 等以上线程完成,以便查看效果(如果主线程退出时,其它线程未完,就售不完所有的票)
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
Thread.currentThread().join();// 等以上线程完成,以便查看效果(如果主线程退出时,其它线程未完,就售不完所有的票)
} catch (InterruptedException e) {
e.printStackTrace();
}
这个可以不要。是所有的线程完后,虚拟机才关闭,一直没注意过这个问题。呵呵