run() 顺序执行
start() 多线程乱序执行
Thread.CurrentThread()
每一个对象都有一把锁,sleep 不会释放锁
sleep可以放大问题的发生性——真实的场景下是成千上万的人在用
两个Thread 操作同一个 list,插入了相同的位置,元素被覆盖掉了
获得调用该方法的对象的锁
原文:https://www.cnblogs.com/cx2016/p/13170358.html