在现实生活中有很多问题涉及到了多线程,可以说多线程与我们的生活息息相关
这里说几个很典型也是很多程序员包括书本所引用的例子:①火车站卖票问题 ②缓冲区缓冲问题 ③生产者消费者问题
这样的问题没有线程根本没有办法解决,但如果解决不好又会遇到很多混乱,下面请看代码。
火车站售票问题
这是一个很典型的火车站售票问题,由于不只有一个售票点,但是票数是有限的,也许有一个售票点正在售票的时候得到了总票数,而另一个点却刚好完成售票操作,那么这个售票点的票数就是有错误的,所以运行上面的代码会发现有的时候执行会发生最终票数为负数的情况。这是一个需要在多线程中解决的问题。
再看一个银行账户存款取款的问题
我们执行完这个代码之后发现有很多的错误出现,比如说
wang账户:现有300.0取走300.0余额0.0
wang账户:现有0.0存入100.0余额0.0
wang账户:现有100.0存入200.0余额0.0
现在会发现出现了典型的数据不一致问题,由于在线程中运行时加入了线程睡眠,所以程序不管是开始运行还是运行结束都是未知的,所以我们的结果也是未知的。很有可能在线程执行的额时候发生了意外,导致了读脏数据。
这些是典型的数据不一致导致了线程执行时发生意外
再看一个的缓冲区问题,假设现在有一个缓冲区装置容量为1,有写入和写出操作两个线程,没次操作都只涉及到一个变量。
我们一般写的话就会出现下面这样的代码。
而现在得到的结果是这样的
存入:0
存入:1
存入:2
存入:3
存入:4
取出:4
取出:4
取出:4
取出:4
取出:4