编写了一个JAVA的售票小程序,多线程实现售票系统,但却无法实现两个线程共享资源,是怎么回事?请指教。

CLASSA{publicstaticvoidmain(String[]args){Btesta=newB();Threadtestb=newThread(testa);... CLASS A {
public static void main(String[]args){
B testa=new B();
Thread testb=new Thread(testa);
new Thread(testb).start();
new Thread(testb).start();
}}
CLASS B Implements Runnable{
int tickets=100;
Synchronized void run(){
while(true){
if(tickets>0){
System.out.println(Thread.currentThread().getName()+"is sailing"+tickets);
tickets--;}}}
运行的结果不是两个线程共用tickets=100的资源,而是每个线程产生tickets=100共200张票,怎么回事?
但是在加public static 修饰时,eclipse 却提示修饰符不合法,只能用终态。
展开
 我来答
Leo分享
2014-07-11 · TA获得超过754个赞
知道小有建树答主
回答量:1405
采纳率:0%
帮助的人:769万
展开全部
两个线程(假设为a,b)不共享资源是由于变量是局部变量。
就是线程a下有一个tickets,
线程b下也有一个tickets,
这时tickets变量为2个。

线程a访问的是a下的tickets,
而线程b访问的是b下的tickets,
所以造成了出票结果为200张。

为了避免这种情况,需要在声明的时候把他设置成全局变量
也就是前面要加入static修饰
把int tickets=100;
修改为public static int tickets=100;
这时无论生成几个线程tickets变量只有一个所有的线程同时对他执行操作。
这时就能保证出票数为100张了
追问
但是在加public static 修饰时,eclipse 却提示修饰符不合法,只能用终态。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式