我想用java多线程同步机制写段卖火车票的程序:
import java.io.*;
import java.util.*;
import java.lang.Thread;
import java.lang.Runnable;class SellThread extends Thread
{ private static int tickets;
public SellThread() {
tickets=100;
} public void run() {
while(true)
{
synchronized(this) {
if (tickets>0) { System.out.println(Thread.currentThread().getName()+"sellticket"+tickets);
tickets--;
}
else
break;
}
}
}
}public class TicketsSystemCo{ public static void main(String[] args)
{ SellThread st1=new SellThread();
st1.start(); SellThread st2=new SellThread();
st2.start(); SellThread st3=new SellThread();
st3.start();
}}
但结果还是有票被重复卖了
import java.io.*;
import java.util.*;
import java.lang.Thread;
import java.lang.Runnable;class SellThread extends Thread
{ private static int tickets;
public SellThread() {
tickets=100;
} public void run() {
while(true)
{
synchronized(this) {
if (tickets>0) { System.out.println(Thread.currentThread().getName()+"sellticket"+tickets);
tickets--;
}
else
break;
}
}
}
}public class TicketsSystemCo{ public static void main(String[] args)
{ SellThread st1=new SellThread();
st1.start(); SellThread st2=new SellThread();
st2.start(); SellThread st3=new SellThread();
st3.start();
}}
但结果还是有票被重复卖了
解决方案 »
- 实例变量scjp考题求解?
- 简单JAVA小程序
- jdbc连接ms数据库的问题请教,不知道是我的代码有问题还是机子的问题,请各位大哥指点指点
- 如何提升自定义队列效率
- a samll jdbc program, please help to find the error, thanks a lot!!!
- Linux 删除问题
- 谁有MSSQLServer4 Kit For MSSQLServer 5.1.0 无限制版
- 如何输出小数时按规定的位数输出。。
- 求问大神Mac电脑中配置Java碰到的问题。运行程序总是显示找不到main函数
- 是Java虚拟机将类加载到内存的吧??????
- 关于线程的问题???
- 系统抛出java.net.BindException:Permission denied异常信息 望高手解决,谢谢!
class SellThread extends Thread
{
private static final Object lock = new Object(); ... synchronized(lock) {
....}
synchronized (this.getClass())