黑马程序员技术交流社区
标题:
多线程问题
[打印本页]
作者:
张海洋
时间:
2013-3-28 22:39
标题:
多线程问题
本帖最后由 张海洋 于 2013-3-29 09:05 编辑
什么情况下需要线程同步?
作者:
蔡陶军
时间:
2013-3-28 22:41
例如访问同一个资源:
例如车站的售票系统,一定是多个线程同时运行售票的吧。
有编号为10000这张票,那么线程thread1正在卖它的时候,其余的线程就不能也卖这张票了。
另一个就是著名的生产者-消费者问题。类比一下,老爸挣钱,打到银行卡里,儿子花钱。(假设卡里有钱的话就暂时不打钱)
对于老爸老说,如果要打钱,查看一下卡,如果有钱,就暂时不放,并通知儿子已经有钱;如果没钱,当然就打钱了。
对于儿子来说,取钱时如果有钱就取,如果没有就等待,并通知老爸没钱了。
这就是同步了。
不知道你理解不?
作者:
HM朱蛟
时间:
2013-3-29 04:34
制造问题: {Thread.sleep(10);} catch (Exception e) {}
效果:错票:Thread-0卖 :-2
△问题的原因:
当多条语句在操作同一个线程共享数据时,一个线程对多条语句只执行了一部分,还没有执行完,另一个线程参与进来执行。导致共享数据的错误。
△解决办法:
对多条操作共享数据的语句,只能让一个线程都执行完。在执行过程中,其他线程不可以参与执行。即synchronized
Java对于多线程的安全问题提供了专业的解决方式。
就是同步代码块:
synchronized(对象)
{
需要被同步的代码
}
对象如同锁。持有锁的线程可以在同步中执行。
没有持有锁的线程即使获取cpu的执行权,也进不去,因为没有获取锁。
作者:
黄玉昆
时间:
2013-3-29 07:44
请看这个帖子:
http://bbs.itheima.com/forum.php ... B%E5%90%8C%E6%AD%A5
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2