run方法难道还存在竞争的可能吗?不是一个线程一个run方法吗?很迷惑。
防止多个线程并发执行的时候,customerServed这个变量累加的结果不对。synchronized(this) 相当于给整个对象加锁,因此每个线程执行到这里的时候都会等待上一个线程释放锁。如果不加 synchronized(this) ,你会发现如果有50个线程执行,最终 customerServed 的结果并不是加了50,而一定会比50少。
如图,没加锁就会出现两个线程同时执行,出现相同结果,从而达不到50的结果
不知道
锁资源,线程被多次执行锁住资源