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

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

两个线程(假设为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 class Test {

public static void main(String[] args) {

for(int i=0 i<3 i++){

new Thread("线程 " + i){

public void run() {

while(true){

int p = getNumber()

if(p >0 ){

System.out.println(getName() + " 票号: " + p)

}else{

System.out.println("没票了")

break

}

}

}

}.start()

}

}

public static int num = 100 //总票数

/**

 * synchronized 同步锁

 * @return

 */

public static synchronized int getNumber(){

if(num >0){

return num -- //如果大于0, 银基喊则返回当前锋旅票并减少一张

}

return 0

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12462837.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存