多线程

程序

  • 一种静态的的概念,通常为可执行文件,当文件执行时,就会产生进程

进程

进程的产生如上所述,每一个进程由3部分组成:java

cpu、data、code安全

通常一个程序会占用一个或多个进程,即使用同一份程序产生好几个进程,它们之间仍是拥有本身的这3样东西,比较浪费内存,cpu的负担较重。多线程

线程

一个进程每每会产生多个线程,以达到提升效率的目的,若是一个进程,只能作到单任务处理,就比如一个低效的员工,既耗着不走,又作不到高效率工做线程

问题

那么说了这么多"多线程"的好处,多线程是否也有坏处呢code

1. 面临着多线程安全问题(我的理解为访问冲突)

当多个线程访问同一个方法时,若其中须要共享变量(或者说须要去从方法中取出一个相同的变量对其进行操做),那么问题就来了对象

好比A线程在访问C方法时取出了变量,还未跳出方法,这时B线程插足了进来,取到的变量多是A操做前也多是A操做后的,可能就达不到咱们预期想要的结果了blog

2.死锁

当一个方法中,须要同时得到"两个或两个以上对象的锁"时,就可能产生死锁问题,两个线程陷入了互相等待,没法继续进行的死锁状态接口

解决

synchronized

  • 通常是加在方法上,来控制线程同步
  1. 对于实例方法,锁的是实例对象
  2. 对于静态方法,锁的是类对象
**注意**

 1. 在定义**接口**方法时不能使用synchronized关键字。
 2. 构造方法不能使用synchronized关键字,但可使用synchronized代码块来进行同步。

咱们能够先来看一下线程状态图
image进程


能够看到wait方法和notify方法必须存在于synchronized块中内存

未完待更......

相关文章
相关标签/搜索