java线程总结同步、死锁与生产者、消费者.

1.同步的产生,处理操作,死锁的情况.

  • 同步:多个线程访问同一资源所需要考虑的问题.异步操作会引起
  • 使用synchronized同步代码块和synchronized方法进行实现同步操作.
  • 同步代码块调用当前线程对象,执行某一操作其他线程对象无法进来.
  • 多个线程访问资源的时候使用synchronize;
  • 同步操作与异步操作相比,异步操作速度会更快但是同步操作时数据的安全性较高属于安全的线程操作.

2.生产者与消费者的问题的产生

  • 问题的引出
  • 生产者和消费者指的是两个不同的线程类对象,操作同一资源的情况
  • 生产者负责生产数据,消费者负责取走数据
  • 生产者每生产完一组数据之后,消费者就取走一组数据.
  • 比较容易出现的问题,1.数据错位. 2.数据重复取出,数据重复设置.
  • 解决数据错乱的问题,数据错位完全是由非同步的操作所造成的,所以需要使用同步处理.
  • 因为取和设置是两个不同的操作,所以想进行同步控制,就需要将其进行定义在同一个类里面完成,可以进行解决数据错位问题.
  • 重复生产和重复取出操作的问题,
  • 如果想实现整个代码的操作,必须加入等待和唤醒机制.在object类中提供了专门处理的几个方法.
  • 等待: public final void wait() throws InterruptedException;
  • 唤醒第一个等待线程: public final void notify();
  • 唤醒全部等待线程,那个优先级高就先执行.public final void notifyAll();

面试题:sleep()与wait()的区别?

  • sleep() 是Thread()类定义的方法,wait()是Object类定义的方法.
  • sleep()可以设置休眠时间,时间一到自动唤醒,而wait()需要等待notify()进行唤醒.

死锁线程同步过多就有可能造成死锁.

  • 死锁是开发中某一逻辑错误造成的的问题,且出现机率较低.

面试题:多线程访问同一资源时需要考虑到那些情况?有可能带来那些问题?

  • 多个线程访问同一资源时一定要处理好同步,可以使用同步代码块或同步方法的形式解决.
  • |-同步代码块: synchronized(锁定对象){代码};
  • |-同步方法: public synchronized 返回值 方法名称(){代码};
  • 但过多的使用同步.有可能造成死锁.
  • 一般同步和异步的区分方式可以通过synchronized 来区分.
  • 死锁是一种不确定的状态,

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值