视频选集
- P1多线程01:概述
- P2多线程02:线程、进程、多线程
- P3多线程03:继承Thread类
- P4多线程04:网图下载
- 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() 多线程乱序执行
Thread.CurrentThread()
每一个对象都有一把锁,sleep 不会释放锁
sleep可以放大问题的发生性——真实的场景下是成千上万的人在用
两个Thread 操作同一个 list,插入了相同的位置,元素被覆盖掉了
获得调用该方法的对象的锁