扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
三个线程共享count, 但count++不是原子操作,包括count与比较sum时候 也是, 会导致出现多线程问题。
创新互联于2013年成立,先为徐州等服务建站,徐州等地企业,进行企业商务咨询服务。为徐州企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
你的答案有两个问题:1,obj不是static,就是说每个线程都有自己的obj,synchronize锁的是自己线程的obj,不能起到阻塞其它线程的作用。运行的话会看到有的票被出售多次。
这个不难,我正好有个类似的模板,稍微修改下文字,调整下就可以用了。
让每个线程只能买一张,买了就解锁,然后回到线程池里面等下一次抢到机会。
Java提供了线程类Thread来创建多线程的程序。其实,创建线程与创建普通的类的对象的操作是一样的,而线程就是Thread类或其子类的实例对象。每个Thread对象描述了一个单独的线程。
你的答案有两个问题:1,obj不是static,就是说每个线程都有自己的obj,synchronize锁的是自己线程的obj,不能起到阻塞其它线程的作用。运行的话会看到有的票被出售多次。
但是要注意,s的定义一定要在run方法之外,不然还会出现负数。因为你启动了3个线程,每个线程都调用了run方法,在每个线程就会在run方法里边产生自己的s对象,一共会产生3个,达不到同步的目的。
如果是数据库,可以使用数据库的锁机制,如果你是想要在自己的程序中进行控制,那么可以使用同步机制,谁先抢占到票的资源谁就获得该资源的处理权限,其它的申请存于请求队列中,或者干脆直接拒绝。
0; i 10; i++) { new Thread(new Save()).start();} } } 线程同步安全模式,当然不是你要求的这个顺序方式..因为售票时,无法保证售票与存票是同步的。我这个写的只是一个简单模式。
让每个线程只能买一张,买了就解锁,然后回到线程池里面等下一次抢到机会。
1,obj不是static,就是说每个线程都有自己的obj,synchronize锁的是自己线程的obj,不能起到阻塞其它线程的作用。运行的话会看到有的票被出售多次。
我们来模拟一个售票系统,实现通过四个售票点发售某次列车的100张票,一个售票点用一个县城来表示。
上面的代码中,我们用ThreadTest类模拟售票处的售票过程,run方法中的每一次循环都将总票数减1,模拟卖出一张车票,同时该车票号打印出来,直接剩余的票数到零为止。
只有在等待池中的线程,才有资格抢夺钥匙。 运行状态:即正在运行的线程。运行状态的线程,能够调用wait方法,让出钥匙,使自己休眠,进入到休眠池中,并会记录当前的运行状态,以便下次夺取钥匙的时候,能继续执行休眠前的动作。
这个不难,我正好有个类似的模板,稍微修改下文字,调整下就可以用了。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流