黑马程序员技术交流社区
标题:
多线程的问题
[打印本页]
作者:
徐大鹏
时间:
2012-11-23 20:54
标题:
多线程的问题
public class SellTicket {
private int sum = 10;
private int curr = 1;
public synchronized void sell(String name) {
if (curr > sum) {
System.out.print("票已经完");
} else {
System.out.print(name + "卖出第:" + curr + "票");
curr++;
}
}
public static void main(String[] args) {
new CQSellTicketThread(new SellTicket(), "上海").start();
}
}
class CQSellTicketThread extends Thread {
private SellTicket sellTicket;
private String name;
public CQSellTicketThread(SellTicket sellTicket, String name) {
this.sellTicket = sellTicket;
this.name = name;
}
public void run() {
sellTicket.sell(this.name);
}
}
复制代码
我的第九行 curr++ 怎么是无效的呢!
作者:
廖力
时间:
2012-11-23 21:08
解决方法
第一种:把private int curr = 1;加上static修饰
private static int curr = 1;
复制代码
第二种:在创建多线程时候传入同一个SellTicket类的对象
SellTickett = new SellTicket();
new CQSellTicketThread(t, "上海").start();
new CQSellTicketThread(t, "上海").start();
new CQSellTicketThread(t, "上海").start();
new CQSellTicketThread(t, "上海").start();
new CQSellTicketThread(t, "上海").start();
new CQSellTicketThread(t, "上海").start();
复制代码
反正我测试是没问题的
作者:
徐大鹏
时间:
2012-11-23 21:32
廖力 发表于 2012-11-23 21:08
解决方法
第一种:把private int curr = 1;加上static修饰第二种:在创建多线程时候传入同一个SellTicket类 ...
new CQSellTicketThread(new SellTicket(), "上海").start();
恍然大悟我这样的写法每次都没一个新SellTicket对象;
作者:
徐大鹏
时间:
2012-11-23 22:06
问题已经解决
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2