本来还想多说点.看了前面两个回答,我觉得我还太基础,就不闹腾了.分享下我的理解,大家交流下.
是这样的,首先,你要有一个概念,就是计算机在执行每一行代码的时候,都是需要消耗时间的,也就是物理时间,你简单可以理解为"执行一行代码就需要一个最小时间单元"
那在多个线程开启后,每个线程都希望抢到执行权,也都会去抢执行权.
但是对于单核来说,只能一次执行一个
也就是说一个最小的时间单元只能执行一个.
这样的话,在我们实现一个代码块或者功能的时候,是由很多行代码组成的.
每一行语句都可能因为线程被抢而被打断.
极端的效果可能是各个线程调用同一个方法,但是方法每一行代码都被抢.
这样,你再多的时间也不能完成一个功能.
这样就比单线程还差.
因为单线程起码还能保证功能实现.
为了保障多线程的优势.
也就是要达到在执行功能或者一个代码块的时候,不要被打断,就加入了同步,也就是"锁"的思想
让着整个代码块使用的整个事件单元必须一起执行,不能被打断.
而执行完的那个时间单元,就立刻被等待的线程们抢夺,提高了进程的效率.
---------------------------------------------------------------------
而死锁.
其实不是说这是一种问题.
这只是一种现象.
现象本身没有好坏.
但是不利于我们使用,所以我们划归为程序中不好的,尽量避免或者解决死锁.
死锁的产生:
是因为我们有时候真的要进行代码块的嵌套.
为什么同步嵌套呢?
我接收到的信息是---这是为了给其他的某种方法增加一个使用条件.
也就是说,我这个外部同步代码块没执行完,就不希望内部锁的同对象锁的代码块不执行.
因为毕竟线程之间使用者相同的资源.
不能说我第一次正用着,我的资源就被别的修改了,那就糟糕了.
死锁,现在不要纠结的太深.
知道会死锁就好.
因为EE毕业后,两年甚至很多年内还开发用不到多线程.
多线程一般是项目经理用来思考代码运行效率时使用的.
所以不担心. |