黑马程序员技术交流社区
标题:
模拟公交车上下车的小问题
[打印本页]
作者:
crossover
时间:
2016-9-6 12:50
标题:
模拟公交车上下车的小问题
public class Test {
/*
* 一辆公交车70个座位,只能从前后门下车,多线程模拟这个过程,
* 并且输出剩下剩余的座位数。
* */
public static void main(String[] args) {
MyThread mt1 = new MyThread();
mt1.setName("前门");
mt1.start();
MyThread mt2 = new MyThread();
mt2.setName("后门");
mt2.start();
}
}
class MyThread extends Thread{
static int seat = 30;
@Override
public void run() {
while(true){
synchronized(MyThread.class){
if(seat == 70 && this.getName().equals("后门")){
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(seat == 0 && this.getName().equals("前门")){
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(this.getName().equals("前门")){
seat++;
System.out.println("上车一个,还剩"+(70-seat)+"个座位");
}else if(this.getName().equals("后门")){
seat--;
System.out.println("下车一个,还剩"+(70-seat)+"个座位");
}
notify();
}
}
}
}
求大神告诉为什么会有异常
作者:
decetwen1989
时间:
2016-9-6 16:11
public class Test {
/*
* * 一辆公交车70个座位,只能从前后门下车,多线程模拟这个过程,
* 并且输出剩下剩余的座位数。
*/
public static void main(String[] args) {
new Bus("前门").start();
new Bus("后门").start();
}
}
class Bus extends Thread {
//定义静态共享变量
private static int seats = 1;
//继承Thread有参构造,给线程命名
public Bus(String name) {
super(name);
}
public void run() {
while (true) {
//锁对象Bus.class
synchronized (Bus.class) {
//判断人全下后结束线程
if (seats > 70) {
break;
}
//睡眠只是为了测试程序,可以注释掉
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
//假设车上70个座位都坐满了
System.out.println(getName() + "下车, 剩余" + seats + "座位");
seats++;
}
}
}
}
作者:
decetwen1989
时间:
2016-9-6 16:12
你程序的错误我不会更改,我只是按照要求帮你写了一个正确的程序
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2