[1]. 首先明确哪些代码是多线程要运行的代码
[2]. 其次明确多线程之间的共享数据
[3]. 再次明确多线程运行的代码中哪些语句是操作共享数据的
[4]. 使用中断CPU执行权的方式对存在的数据安全问题进行分析
{4.1}. 在第一次操作到共享数据的语句处做一个标记并假设有多个线程处于该语句处并等待执行。
{4.2}. 假设某一个线程执行了第一条操作了共享数据有关的语句之后,CPU立刻切换了其他的线程。
{4.3}. 假设另一个线程再次进入这个方法并修改了相应的共享数据之后,再次被CPU中断了执行。
{4.4}. 最后假设CPU将执行权切换到之前没有执行完共享语句代码块对应的线程继续执行。这样由于这个共享数据被其他线程修改过,使得这个线程在操作同一个共享数据的前后读取或者修改的这个数据并不是这个线程自己所为,所以此时就能分析出多线程操作共享数据发生的错误了。
<font color="#c41230">使用Thread.sleep(xxx)强行切换CPU执行的线程【模拟】</font>