多个线程同时操作一个数据的时候会出现线程安全问题。
出现原因:
上个线程操作该数据尚未完成,其他线程也参与进来操作该数据,导致线程安全问题;
解决方案:
当一个线程正在操作数据时,其他线程不能参与进来操作该数据,只有该线程执行完,下个线程才可操作,即使该线程出现阻塞也不行。
java中可通过同步机制来解决线程安全问题。
1.同步代码块 或 同步方法:使用synchronized关键字修饰代码块儿或方法;
说明:操作共享数据的代码,即为需要被同步的代码;
共享数据:多个线程共同操作的数据或变量;
同步器监视:俗称“锁”。任何一个类的对象,都可以充当锁。 要求:多个线程必须使用同一个锁。
优点:解决了线程的安全问题。
缺点:效率会降低;可能会导致死锁
2.使用lock锁:实例化一个reentrantlock对象,手动启用lock方法,结束时需手动调用unlock方法。