在单线程中不会出现线程安全问题,而在多线程编程中,有可能会出现同时访问同一个资源的情况,如果对于修改数据的代码不采用一定的措施,则多个线程可能在写入数据时出现脏数据的问题。
因为每个线程执行的过程是不可控的,所以很可能导致最终的结果与实际上的愿望相违背或者直接导致程序出错。
基本上所有的并发模式在解决线程安全问题上,都采用“序列化访问临界资源”的方案。
通常来说,是在访问临界资源的代码前面加上一个锁,当访问完临界资源后释放锁,让其他线程继续访问。
具体解决办法就是利用synchronized为程序加锁。
在使用synchronized时,不同的锁的作用如下: