黑马程序员技术交流社区

标题: 请大神指教多线程的基本原理和死锁 [打印本页]

作者: wjhsyy    时间: 2016-10-17 22:29
标题: 请大神指教多线程的基本原理和死锁


作者: zhangyuren    时间: 2016-10-17 22:29
本来还想多说点.看了前面两个回答,我觉得我还太基础,就不闹腾了.分享下我的理解,大家交流下.

是这样的,首先,你要有一个概念,就是计算机在执行每一行代码的时候,都是需要消耗时间的,也就是物理时间,你简单可以理解为"执行一行代码就需要一个最小时间单元"

那在多个线程开启后,每个线程都希望抢到执行权,也都会去抢执行权.
但是对于单核来说,只能一次执行一个
也就是说一个最小的时间单元只能执行一个.

这样的话,在我们实现一个代码块或者功能的时候,是由很多行代码组成的.
每一行语句都可能因为线程被抢而被打断.

极端的效果可能是各个线程调用同一个方法,但是方法每一行代码都被抢.
这样,你再多的时间也不能完成一个功能.

这样就比单线程还差.

因为单线程起码还能保证功能实现.

为了保障多线程的优势.

也就是要达到在执行功能或者一个代码块的时候,不要被打断,就加入了同步,也就是"锁"的思想

让着整个代码块使用的整个事件单元必须一起执行,不能被打断.

而执行完的那个时间单元,就立刻被等待的线程们抢夺,提高了进程的效率.

---------------------------------------------------------------------
而死锁.
其实不是说这是一种问题.
这只是一种现象.

现象本身没有好坏.

但是不利于我们使用,所以我们划归为程序中不好的,尽量避免或者解决死锁.

死锁的产生:
是因为我们有时候真的要进行代码块的嵌套.

为什么同步嵌套呢?
我接收到的信息是---这是为了给其他的某种方法增加一个使用条件.
也就是说,我这个外部同步代码块没执行完,就不希望内部锁的同对象锁的代码块不执行.

因为毕竟线程之间使用者相同的资源.

不能说我第一次正用着,我的资源就被别的修改了,那就糟糕了.

死锁,现在不要纠结的太深.

知道会死锁就好.

因为EE毕业后,两年甚至很多年内还开发用不到多线程.

多线程一般是项目经理用来思考代码运行效率时使用的.

所以不担心.
作者: gyy    时间: 2016-10-18 23:43
基本原理?这个可这几句话是讲不清楚的,建议你去看看一些比较好的博客,或者技术书籍吧
作者: 小菜_一碟    时间: 2016-10-22 17:14
如果只是使用的话,了解下基本基本的类使用和多看几个实例吧。如果要深入点的话就看看操作系统和java并发编程实战。
作者: 笑对明天    时间: 2017-2-16 00:24
视频里不是说了么,就像两个人吃饭,我要拿了一直筷子,你拿了一只筷子,我要你的另一只筷子,你要我的另一只筷子,这样就锁死
作者: lvshen9    时间: 2017-2-18 14:28
线程互不相让的抢资源会出现死锁





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2