为什么要使用synchronized?
主要针对并发编程的安全问题:共享数据或多线程共同操作共享数据时保证同一时刻只有一个线程可以使用共享资源。
问题发现:定义一个售票类,继承Thread,重写run方法,初试ticket值为100。
运行结果:省略前面部分,只截取出错展示
问题分析:在程序中我们定义了如果票数小于等于0时则立即停止循环,但是现在出现了第0张票和第-1张票。
出错原因:我们程序是多线程执行的,假设当四号线程线程获得CPU,此时还有一张票,则一路执行到sleep时休眠0.1秒,此时CPU切换交由一号线程执行,也一路执行到sleep时休眠0.1秒,此时CPU切换交由二号线程执行,也一路执行到sleep时休眠0.1秒。然后