多线程之间实现同步

什么是线程安全?线程为什么存在安全问题?

当我们需要多个线程之间,“共享某资源”。即:同一个全局变量/静态变量。当多个线程在对这个变量进行写操作时可能会发生冲突问题,即线程的安全问题。但是做读操作是不会发生数据冲突问题。

如何解决线程不安全的问题?

  1. 使用同步锁,即:synchronized关键字修饰(代码块/函数)
  2. 使用Lock锁

为什么使用了锁,线程就安全了?

使用锁后,某一段代码只能让一个线程进入执行。代码执行完毕之后才释放锁,释放之后其他线程才能有资格进入执行。
举个栗子: 一个洗手间只能一个人进入,进入之后反锁。其他的人只能里面的人使用完了,把门锁开了才能进去。

什么是线程之间的同步?

即:多个线程之间共享一个资源,不会受到其他线程的干扰。

什么是同步代码块/函数?

// 同步代码块
synchronized(共享的数据){
 	// 当多线程情况下会出现问题的代码
}

// 同步函数
public synchronized void xxx(){
	// 当多线程情况下会出现问题的代码
}

线程之间的死锁是什么一回事?

即:多线程死锁问题,死锁的产生条件如下:

  1. 互斥条件:一个资源每次只能被一个线程使用
  2. 请求与保持条件:一个线程因请求资源而阻塞时,对已获得的资源保持不放
  3. 不剥夺条件:进程已经获得的资源,在未使用完之前,不能强行剥夺
  4. 循环等待条件:若干线程之间形成一种头尾相接的循环等待资源关系

如何避免死锁?

  1. 加锁的顺序
  2. 加锁的时限
  3. 死锁检测

关于死锁和避免死锁的更多内容可以百度进行深入学习

synchronized 的缺点

无法显示的手动上锁和解锁
(想要控制锁,就需要使用JDK中的并发包(JUC包)中的锁lock)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值