java多线程模拟售票问题
1、java中有两种实现多线程的方式。一是直接继承Thread类,二是实现Runnable接口。那么这两种实现多线程的方式在应用上有什么区别呢?为了回答这个问题,我们可以通过编写一段代码来进行分析。
2、你的答案有两个问题:1,obj不是static,就是说每个线程都有自己的obj,synchronize锁的是自己线程的obj,不能起到阻塞其它线程的作用。运行的话会看到有的票被出售多次。
3、代码不要贴图,这样谁也看不清楚更无法调试。请发到百度空间/贴吧/云盘 等 其他百度产品里,然后贴链接到这。
4、两者的区别:第一种是多个线程同步完成一个任务,比如买票,第二种是不同线程完成不同的任务。intertupt()方法用来“吵醒”休眠的线程,sleep()方法让进程处于睡眠状态。
java火车卖票多线程程序,想统计出窗口1和窗口2各卖出多少票,结果不正确…
1、,obj不是static,就是说每个线程都有自己的obj,synchronize锁的是自己线程的obj,不能起到阻塞其它线程的作用。运行的话会看到有的票被出售多次。
2、影院为每个窗口放有100张电影票,分别是儿童票、成人票和老人票。三个窗口需要同时卖票,而现在只有一个售票员,这个售票员就相当于一个CPU,三个窗口就相当于三个线程。通过程序来看一看是如 何创建这三个线程的。
3、你这代码如果执行很多次,一定会出现不同的打印结果,不信你不妨试试。
4、synchronized (s)的s是synchronized 的参数,synchronized 的参数可以是任意对象,我定义了一个String类型的对象s,方便看程序而已。但是要注意,s的定义一定要在run方法之外,不然还会出现负数。
5、火车站窗口售票与网上售票的时间有差别:(1)网上售票时间从清晨6点开始到晚上11点停止,提前30天预售。(2)窗口是人工服务,全天24小时都有售票员售票,预售28天的火车票。(3)售出的票和库存的票保持同步。
100张票,用java多线程实现3个窗口按顺序依次卖票,如何实现
1、,obj不是static,就是说每个线程都有自己的obj,synchronize锁的是自己线程的obj,不能起到阻塞其它线程的作用。运行的话会看到有的票被出售多次。
2、因为同步代码块我用的SoldThread这个类当锁,而同步方法的,使用的是对象当锁,所以我建立了100个对象,锁相当于无用。
3、整个随机的算法就有错。简单的做法,把数组赋上0,1,2 然后随机两个位置进行交换。多交换几次,就好了。注意(int)(Math.random()*2)只能得到0,1 两个数,(int)的算法是去尾,不是四舍五入。