上篇安全唠了,不安全也有很多东西,开唠:
两个线程用了synchronized锁之后的执行流程:
- 如果多个线程对同一个共享资源(也叫临界资源,也叫缓冲区里面的资源)进行访问而不采取同步操作的话(还记得同步操作是什么吗,同步就指的是顺序执行不会交替执行),那么操作的结果是不一致的,也不一定是准确的
一个程序运行多个线程本身是没有问题的,问题出在多个线程访问共享资源(多个线程读共享资源其实也没有问题),在多个线程对共享资源读写操作时发生指令交错,就会出现问题
- 一段代码块内如果存在对共享资源的多线程读写操作,称这段代码块为临界区
{//++操作既有读也有写,并且counter也是一个共享资源,所以这个++操作就是一个临界区 counter++; }
- 竞态条件Race Condition:多个线程在临界区内执行,由于
代码的执行序列不同
而导致结果无法预测,称之为发生了竞态条件
比如咱们可以编写一个程序,每买一张票表示票数的变量减一,在多线程条件下,票数可能出现负数,比如负一。其原因呢,就是:
又比如:
所以得想些方法,比如上一篇里面有些方法可以保证线程的安全性,挑一部分回忆回忆。