java多线程3

1.等待唤醒机制:wait - notify/notifyAll
  优点:节约资源
  不是安全机制,是资源节约机制。
  用法:
  1.等待唤醒机制必须结合锁使用,也就是synchronized (Object obj){...}  
  2.等待唤醒要被锁调用,必须使用相同的锁
2.锁的作用与使用
  锁是控制多个线程对共享资源进行访问的工具。通常,锁提供了对共享资源的独占访问。
  一次只能有一个线程获得锁,对共享资源的所有访问都需要首先获得锁。 
  锁的工作原理:
  对象有一个标志位:默认为1
  1.当线程1进来时,标志位被改为0
  2.这时其余线程操作锁,判断标志位为0,那么不进入被锁定的代码块
  3.当第一根线程操作完成锁定的代码块时,锁的标志位又改为1
  4.之后其他线程再来操作锁,就可以进入了。
  锁类似于 --- 火车上的厕所 
  锁使用注意:要找到准确的位置代码,范围可以扩大,但要注意要适当,如将无关问题的for循环包含进锁中,
              那么该循环一次只能被一个线程访问,本来线程同步时可以大大降低效率,这样一来反而增加了
              程序执行的效率,所以包含的位置也要适当。
  建议:刚开始用往大范围加,也先不用考虑效率问题。
-------------------------------------------------------------------------------------------
  锁的使用方式
  1:synchronized代码块
  synchronized(Object obj){
     //可能存在问题的代码
  }
  
  2:synchronized修饰方法
  直接在方法的修饰符上添加synchronized,标志位影响线程对方法的调用。
  方法的锁后面没有参数,那么方法的锁是什么?
  A.如果是静态方法,那么锁是函数所在类的class对象,即类名.class
  B.如果是成员方法,那么锁是this对象,
扩展:其他同步思路:voilate关键字,实现callable接口,Future,
                   Executors,ExecutorService实现一个含有返回值的线程
------------------------------------------------------------------------------------
3.线程同步:指的是多个线程访问被synchronized代码块包裹的共享资源时,
            在某时刻只能只能有一个线程访问该资源。
------------------------------------------------------------------------------------
4.死锁:
stop destory resume 为什么不建议使用了?
答:容易导致死锁
=====什么是死锁???
线程1持有锁A需要锁B
线程2持有锁B需要锁A
概念:
原子操作:基本类型中除了long和double不是,其他都是,
          引用类型也是,32位的都是,64位的不是,引用类型操作系统底层也是32位。

思索的解决 ----- wait--notify:等待唤醒

5.线程通信;
  生产者消费者模式

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智玲君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值