《狂神说——多线程》【1】

 

视频选集

5/28
  • P1多线程01:概述
  • P2多线程02:线程、进程、多线程
  • P3多线程03:继承Thread类
  • P4多线程04:网图下载
  • P5多线程05:实现Runnable接口
  • P6多线程06:初识并发问题
  • P7多线程07:龟兔赛跑
  • P8多线程08:实现Callable接口
  • P9多线程09:静态代理模式
  • P10多线程10:Lamda表达式
  • P11多线程11:线程停止
  • P12多线程12:线程休眠_sleep
  • P13多线程13:线程礼让_yield
  • P14多线程14:线程强制执行_join
  • P15多线程15:观测线程状态
  • P16多线程16:线程的优先级
  • P17多线程17:守护线程
  • P18多线程18:线程同步机制
  • P19多线程19:三大不安全案例
  • P20多线程20:同步方法及同步块
  • P21多线程21:CopyOnWriteArrayList
  • P22多线程22:死锁
  • P23多线程23:Lock锁
  • P24多线程24:生产者消费者问题
  • P25多线程25:管程法
  • P26多线程26:信号灯法
  • P27多线程27:线程池
  • P28多线程28:总结

run() 顺序执行

start() 多线程乱序执行

 

  • P5多线程05:实现Runnable接口

《狂神说——多线程》【1】_第1张图片

 

 

 

 

 

 

 

 

Thread.CurrentThread()

 

 

  《狂神说——多线程》【1】_第2张图片

 

  

 

  《狂神说——多线程》【1】_第3张图片

 

  《狂神说——多线程》【1】_第4张图片

 

  《狂神说——多线程》【1】_第5张图片

 

  《狂神说——多线程》【1】_第6张图片

 

 《狂神说——多线程》【1】_第7张图片

 

  《狂神说——多线程》【1】_第8张图片

 

 《狂神说——多线程》【1】_第9张图片

 

 

 

 

 《狂神说——多线程》【1】_第10张图片

 

 

每一个对象都有一把锁,sleep 不会释放锁

 

 

  

 

 

《狂神说——多线程》【1】_第11张图片

 

 

 

 

 

 

《狂神说——多线程》【1】_第12张图片

 

 

 

 

 

 

 

 

 

 

 

  《狂神说——多线程》【1】_第13张图片

 

 《狂神说——多线程》【1】_第14张图片

 

 

 

 

 

 《狂神说——多线程》【1】_第15张图片

 

 《狂神说——多线程》【1】_第16张图片

 

 《狂神说——多线程》【1】_第17张图片

 

 

 

 

 

 

 

 

 

 

 

 《狂神说——多线程》【1】_第18张图片

 

 sleep可以放大问题的发生性——真实的场景下是成千上万的人在用 

 

 

 

 

 

 

  

 

  两个Thread 操作同一个 list,插入了相同的位置,元素被覆盖掉了

 

 

 获得调用该方法的对象的锁

 

 

 

 

 

 

 

 

 

 

 

 《狂神说——多线程》【1】_第19张图片

 

 

 

 

 

 

因为改的对象是 account,不是 this (Drawing 对象),所以应该使用 同步块 

 

 

 火车票这个例子,锁 this 是可以的:

 

 

 

 

 synchronized(account){

}

就可以了

《狂神说——多线程》【1】_第20张图片

 

 

 

 

不应该锁:银行

应该锁:账户

 

 

  《狂神说——多线程》【1】_第21张图片

 

 Callable 就是 concurrent 包里面的

 

 

 《狂神说——多线程》【1】_第22张图片

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

解决办法:

 

 

 《狂神说——多线程》【1】_第23张图片

 

  

 

 

你可能感兴趣的:(《狂神说——多线程》【1】)