多线程&并发

程序

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

进程

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

cpu、data、code

一般一个程序会占用一个或多个进程,即便用同一份程序产生好几个进程,它们之间还是拥有自己的这3样东西,比较浪费内存,cpu的负担较重。

线程

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

问题

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

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

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

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

2.死锁

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

解决

synchronized

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

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

我们可以先来看一下线程状态图
image


可以看到wait方法和notify方法必须存在于synchronized块中

突然发现咕了好久hhh

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值