编写了一个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

}

}

1,用户名和密码需要在数据库建立一张表来存储,登录的时候验证用

2,数据库的链接应该需要去下载一个mysql的jdbc的驱动,然后上网搜一下怎样写一个连接类就可以了

3,新用户注册其实就是往储存用户名和密码的表里面新增加一条数据,以后就可以用来登录验证用了

4,网上类似的程序很多,可以借鉴。


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存