public class MyThread extends Thread{
private static int ticketNum = 0;
public MyThread(String name){
super(name);
}
public void run(){
while(ticketNum<1000){
print();
}
}
public synchronized void print(){
MyThread.ticketNum = 1+MyThread.ticketNum;
System.out.println(this.getName()+"卖票一张,编号:\t"+MyThread.ticketNum);
}
}
解决方案 »
- getLabel()与getActioncommand()
- object问题
- 点一个button,出现一个弹出窗口,可以输入一个值,回添给原来窗口?
- 请问各位用什么工具写EJB比较方便?
- (String)System.in.read();?????
- IBM WebSphere 3.5.0如何配置testapp应用程序才能运行?
- JAVA入门问题!!!
- JBuilder6 替换文本,sos
- 我要从数据库中删除jdbTable中鼠标点中的行,我怎么得到我选中的是哪一行呀,40分!!
- 求大能帮我解决个JPanel窗口的问题~~~急~~~~~
- java问题
- java数组的大小超出了int的表示范围怎么办?
MyThread mt1 = new MyThread("窗口1");
MyThread mt2 = new MyThread("窗口2");
MyThread mt3 = new MyThread("窗口3");
MyThread mt4 = new MyThread("窗口4");
mt1.start();
mt2.start();
mt3.start();
mt4.start();用上面四个线程测试,结果打印时还是有乱序(不是1-1000的顺序)。
Thread t1=new Thread(mt,"窗口1");// 四个线程运行同一段代码,同步对象是一个mt.
Thread t2=new Thread(mt,"窗口2");
Thread t3=new Thread(mt,"窗口3");
Thread t4=new Thread(mt,"窗口4");t1.start();
t2.start();
t3.start();
t4.start();
public class MyThread extends Thread {
private static int ticketNum = 0; public MyThread(String name) {
super(name);
} public void run() {
while (ticketNum < 1000) {
print();
}
} public synchronized void print() {
MyThread.ticketNum = 1 + MyThread.ticketNum;
System.out.println(this.getName() + "卖票一张,编号:\t" + MyThread.ticketNum);
}
public static void main(String[] args) {
new MyThread("").start();
}}
运行非常正常
MyThread mt1 = new MyThread("窗口1");MyThread mt2 = new MyThread("窗口2");MyThread mt3 = new MyThread("窗口3");MyThread mt4 = new MyThread("窗口4");mt1.start();mt2.start();mt3.start();mt4.start();
改成楼上的代码就行了