多线程数据共享之卖票问题

来看一道经典的多线程问题,多个售票窗口卖票:涉及到线程的创建,资源的掠夺,语法新特性等等。
ps:使用了jdk8的新特性 不懂请 看jdk8新特性

欢迎点赞关注:qq: 1184905186

public class ThreadTest03 {
    public static void main(String[] args) {
        TicketWindow ticketWindow = new TicketWindow(2000);
        List<Thread> list = new ArrayList<>();
        // 用来存储买出去多少张票
        List<Integer> sellCount = new Vector<>();
        //200窗口卖2000张票
        for (int i = 1; i < 200; i++) {
            Thread t = new Thread(() -> {


                try {
                    //暴露问题
                    sleep(randomAmount());
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                // 分析这里的竞态条件 每个窗口卖的票数是随机的
                int count = ticketWindow.sell(randomAmount());
                sellCount.add(count);
            },""+i);
            list.add(t);
            t.start();
        }
        list.forEach((t) -> {
            try {
                t.join();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });
        // 买出去的票求和
        System.out.println("一共卖了 :" + sellCount.stream().mapToInt(c -> c).sum());
        // 剩余票数
        System.out.println("最后剩余票数" + ticketWindow.getCount());
    }

    // Random 为线程安全
    static Random random = new Random();

    // 随机 1~5
    public static int randomAmount() {
        return random.nextInt(5) + 1;
    }
}

class TicketWindow {
    private int count;

    public TicketWindow(int count) {
        this.count = count;
    }

    public int getCount() {
        return count;
    }

    //资源竞争
    public synchronized int sell(int amount) {
        if (this.count >= amount) {
            this.count -= amount;
            System.out.printf("窗口 %s  卖了 %d 张,剩余 %d 张票\n",Thread.currentThread().getName(),amount,count);
            return amount;
        } else {
            return 0;
        }
    }
}
"C:\Program Files\Java\jdk1.8.0_161\bin\java.exe" -javaagent:E:\install\IntelliJIDEA2018.3.6\lib\idea_rt.jar=55326:E:\install\IntelliJIDEA2018.3.6\bin -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_161\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_161\jre\lib\rt.jar;D:\javaEE\Sort\out\production\ThreadTest" ThreadTest03
窗口 8  卖了 4,剩余 1996 张票
窗口 198  卖了 3,剩余 1993 张票
窗口 195  卖了 4,剩余 1989 张票
窗口 187  卖了 4,剩余 1985 张票
窗口 176  卖了 3,剩余 1982 张票
窗口 192  卖了 3,剩余 1979 张票
窗口 197  卖了 4,剩余 1975 张票
窗口 193  卖了 5,剩余 1970 张票
窗口 179  卖了 5,剩余 1965 张票
窗口 180  卖了 2,剩余 1963 张票
窗口 189  卖了 1,剩余 1962 张票
窗口 183  卖了 5,剩余 1957 张票
窗口 185  卖了 4,剩余 1953 张票
窗口 196  卖了 3,剩余 1950 张票
窗口 181  卖了 4,剩余 1946 张票
窗口 173  卖了 1,剩余 1945 张票
窗口 199  卖了 4,剩余 1941 张票
窗口 191  卖了 1,剩余 1940 张票
窗口 164  卖了 4,剩余 1936 张票
窗口 177  卖了 2,剩余 1934 张票
窗口 167  卖了 4,剩余 1930 张票
窗口 161  卖了 1,剩余 1929 张票
窗口 158  卖了 1,剩余 1928 张票
窗口 165  卖了 3,剩余 1925 张票
窗口 194  卖了 1,剩余 1924 张票
窗口 190  卖了 1,剩余 1923 张票
窗口 186  卖了 4,剩余 1919 张票
窗口 170  卖了 4,剩余 1915 张票
窗口 188  卖了 3,剩余 1912 张票
窗口 162  卖了 4,剩余 1908 张票
窗口 156  卖了 1,剩余 1907 张票
窗口 171  卖了 3,剩余 1904 张票
窗口 163  卖了 1,剩余 1903 张票
窗口 153  卖了 1,剩余 1902 张票
窗口 150  卖了 3,剩余 1899 张票
窗口 149  卖了 4,剩余 1895 张票
窗口 146  卖了 3,剩余 1892 张票
窗口 184  卖了 5,剩余 1887 张票
窗口 182  卖了 1,剩余 1886 张票
窗口 178  卖了 4,剩余 1882 张票
窗口 175  卖了 5,剩余 1877 张票
窗口 172  卖了 5,剩余 1872 张票
窗口 168  卖了 2,剩余 1870 张票
窗口 159  卖了 1,剩余 1869 张票
窗口 152  卖了 2,剩余 1867 张票
窗口 136  卖了 5,剩余 1862 张票
窗口 155  卖了 4,剩余 1858 张票
窗口 145  卖了 1,剩余 1857 张票
窗口 174  卖了 1,剩余 1856 张票
窗口 166  卖了 5,剩余 1851 张票
窗口 169  卖了 5,剩余 1846 张票
窗口 154  卖了 3,剩余 1843 张票
窗口 134  卖了 1,剩余 1842 张票
窗口 160  卖了 1,剩余 1841 张票
窗口 133  卖了 1,剩余 1840 张票
窗口 148  卖了 4,剩余 1836 张票
窗口 147  卖了 1,剩余 1835 张票
窗口 130  卖了 5,剩余 1830 张票
窗口 143  卖了 3,剩余 1827 张票
窗口 132  卖了 2,剩余 1825 张票
窗口 125  卖了 4,剩余 1821 张票
窗口 144  卖了 2,剩余 1819 张票
窗口 140  卖了 1,剩余 1818 张票
窗口 139  卖了 5,剩余 1813 张票
窗口 119  卖了 1,剩余 1812 张票
窗口 123  卖了 5,剩余 1807 张票
窗口 157  卖了 1,剩余 1806 张票
窗口 137  卖了 4,剩余 1802 张票
窗口 117  卖了 1,剩余 1801 张票
窗口 121  卖了 1,剩余 1800 张票
窗口 129  卖了 2,剩余 1798 张票
窗口 114  卖了 1,剩余 1797 张票
窗口 141  卖了 5,剩余 1792 张票
窗口 142  卖了 2,剩余 1790 张票
窗口 105  卖了 2,剩余 1788 张票
窗口 135  卖了 1,剩余 1787 张票
窗口 151  卖了 3,剩余 1784 张票
窗口 116  卖了 2,剩余 1782 张票
窗口 120  卖了 1,剩余 1781 张票
窗口 113  卖了 2,剩余 1779 张票
窗口 108  卖了 3,剩余 1776 张票
窗口 111  卖了 4,剩余 1772 张票
窗口 131  卖了 4,剩余 1768 张票
窗口 102  卖了 3,剩余 1765 张票
窗口 138  卖了 1,剩余 1764 张票
窗口 110  卖了 5,剩余 1759 张票
窗口 101  卖了 1,剩余 1758 张票
窗口 97  卖了 2,剩余 1756 张票
窗口 96  卖了 2,剩余 1754 张票
窗口 128  卖了 1,剩余 1753 张票
窗口 127  卖了 2,剩余 1751 张票
窗口 112  卖了 1,剩余 1750 张票
窗口 124  卖了 1,剩余 1749 张票
窗口 107  卖了 2,剩余 1747 张票
窗口 99  卖了 2,剩余 1745 张票
窗口 126  卖了 1,剩余 1744 张票
窗口 118  卖了 1,剩余 1743 张票
窗口 90  卖了 3,剩余 1740 张票
窗口 82  卖了 3,剩余 1737 张票
窗口 93  卖了 5,剩余 1732 张票
窗口 81  卖了 4,剩余 1728 张票
窗口 122  卖了 1,剩余 1727 张票
窗口 98  卖了 5,剩余 1722 张票
窗口 104  卖了 1,剩余 1721 张票
窗口 115  卖了 2,剩余 1719 张票
窗口 103  卖了 3,剩余 1716 张票
窗口 80  卖了 3,剩余 1713 张票
窗口 79  卖了 1,剩余 1712 张票
窗口 92  卖了 3,剩余 1709 张票
窗口 109  卖了 5,剩余 1704 张票
窗口 106  卖了 5,剩余 1699 张票
窗口 94  卖了 2,剩余 1697 张票
窗口 84  卖了 4,剩余 1693 张票
窗口 100  卖了 3,剩余 1690 张票
窗口 63  卖了 2,剩余 1688 张票
窗口 68  卖了 5,剩余 1683 张票
窗口 76  卖了 4,剩余 1679 张票
窗口 69  卖了 5,剩余 1674 张票
窗口 86  卖了 3,剩余 1671 张票
窗口 62  卖了 4,剩余 1667 张票
窗口 66  卖了 3,剩余 1664 张票
窗口 50  卖了 3,剩余 1661 张票
窗口 77  卖了 1,剩余 1660 张票
窗口 88  卖了 5,剩余 1655 张票
窗口 53  卖了 2,剩余 1653 张票
窗口 95  卖了 1,剩余 1652 张票
窗口 91  卖了 1,剩余 1651 张票
窗口 59  卖了 5,剩余 1646 张票
窗口 72  卖了 2,剩余 1644 张票
窗口 71  卖了 2,剩余 1642 张票
窗口 47  卖了 1,剩余 1641 张票
窗口 61  卖了 3,剩余 1638 张票
窗口 57  卖了 1,剩余 1637 张票
窗口 74  卖了 1,剩余 1636 张票
窗口 73  卖了 4,剩余 1632 张票
窗口 70  卖了 5,剩余 1627 张票
窗口 75  卖了 2,剩余 1625 张票
窗口 39  卖了 1,剩余 1624 张票
窗口 60  卖了 3,剩余 1621 张票
窗口 67  卖了 2,剩余 1619 张票
窗口 44  卖了 4,剩余 1615 张票
窗口 24  卖了 5,剩余 1610 张票
窗口 28  卖了 1,剩余 1609 张票
窗口 32  卖了 1,剩余 1608 张票
窗口 87  卖了 5,剩余 1603 张票
窗口 83  卖了 3,剩余 1600 张票
窗口 38  卖了 4,剩余 1596 张票
窗口 65  卖了 4,剩余 1592 张票
窗口 42  卖了 5,剩余 1587 张票
窗口 33  卖了 1,剩余 1586 张票
窗口 54  卖了 2,剩余 1584 张票
窗口 85  卖了 1,剩余 1583 张票
窗口 89  卖了 1,剩余 1582 张票
窗口 78  卖了 2,剩余 1580 张票
窗口 40  卖了 5,剩余 1575 张票
窗口 35  卖了 2,剩余 1573 张票
窗口 23  卖了 1,剩余 1572 张票
窗口 27  卖了 3,剩余 1569 张票
窗口 31  卖了 2,剩余 1567 张票
窗口 52  卖了 5,剩余 1562 张票
窗口 48  卖了 5,剩余 1557 张票
窗口 41  卖了 4,剩余 1553 张票
窗口 45  卖了 4,剩余 1549 张票
窗口 36  卖了 5,剩余 1544 张票
窗口 25  卖了 3,剩余 1541 张票
窗口 46  卖了 3,剩余 1538 张票
窗口 43  卖了 2,剩余 1536 张票
窗口 12  卖了 2,剩余 1534 张票
窗口 51  卖了 5,剩余 1529 张票
窗口 16  卖了 3,剩余 1526 张票
窗口 30  卖了 5,剩余 1521 张票
窗口 49  卖了 1,剩余 1520 张票
窗口 64  卖了 5,剩余 1515 张票
窗口 56  卖了 1,剩余 1514 张票
窗口 58  卖了 1,剩余 1513 张票
窗口 55  卖了 4,剩余 1509 张票
窗口 14  卖了 1,剩余 1508 张票
窗口 7  卖了 3,剩余 1505 张票
窗口 4  卖了 5,剩余 1500 张票
窗口 29  卖了 4,剩余 1496 张票
窗口 22  卖了 3,剩余 1493 张票
窗口 37  卖了 3,剩余 1490 张票
窗口 34  卖了 5,剩余 1485 张票
窗口 26  卖了 2,剩余 1483 张票
窗口 19  卖了 4,剩余 1479 张票
窗口 20  卖了 4,剩余 1475 张票
窗口 15  卖了 5,剩余 1470 张票
窗口 21  卖了 3,剩余 1467 张票
窗口 18  卖了 5,剩余 1462 张票
窗口 11  卖了 2,剩余 1460 张票
窗口 17  卖了 3,剩余 1457 张票
窗口 13  卖了 1,剩余 1456 张票
窗口 2  卖了 1,剩余 1455 张票
窗口 6  卖了 3,剩余 1452 张票
窗口 3  卖了 3,剩余 1449 张票
窗口 10  卖了 5,剩余 1444 张票
窗口 9  卖了 5,剩余 1439 张票
窗口 5  卖了 5,剩余 1434 张票
窗口 1  卖了 2,剩余 1432 张票
一共卖了 :568
剩余票数1432
发布了320 篇原创文章 · 获赞 152 · 访问量 64万+

猜你喜欢

转载自blog.csdn.net/hello_word2/article/details/104997471