开发者社区> 问答> 正文

程序纠错

screenshot
screenshot
为什么运行后不出现“给你票,你给我20,找你15元”

展开
收起
蛮大人123 2016-02-18 14:17:28 2070 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    因为你这两个线程没有公用同一个saleTicket对象对你程序修改如下:

    public class maipiao implements Runnable {
    
        Thread wang, li;
    
        saleTicket saleTicket=new saleTicket();
    
        maipiao() {
            wang = new Thread(this);
            li = new Thread(this);
        }
    
        @Override
        public void run() {
            if (Thread.currentThread() == wang) {
                saleTicket.rule(5);
            } else if (Thread.currentThread() == li) {
                saleTicket.rule(20);
            }
    
        }
    
        public static void main(String[] args) {
            maipiao a = new maipiao();
            a.wang.start();
            a.li.start();
        }
    }
    
    class saleTicket {
        int ticket5 = 2, ticket10 = 0, ticket20 = 0;
    
        public synchronized void rule(int money) {
    
            System.out.println("money:"+money+"|"+ticket5);
            if (money == 5) {
                ticket5 = ticket5 + 1;
                System.out.println("给你票,你的钱正好");
            } else if (money == 20) {
                while (ticket5 < 3) {
                    try {
                        wait();
                    } catch (InterruptedException e) {
                    }
                }
                ticket20 = ticket20 + 1;
                ticket5 = ticket5 - 3;
                System.out.println("给你票,你给我20,找你15元");
            }
            notifyAll();
        }
    }
    2019-07-17 18:43:55
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
140-弱监督机器学...1506573734.pdf 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载