java线程同步问题

多个线程同时操作一个数据的时候会出现线程安全问题。

出现原因:

        上个线程操作该数据尚未完成,其他线程也参与进来操作该数据,导致线程安全问题;

解决方案:

        当一个线程正在操作数据时,其他线程不能参与进来操作该数据,只有该线程执行完,下个线程才可操作,即使该线程出现阻塞也不行。

        java中可通过同步机制来解决线程安全问题。

1.同步代码块 或 同步方法:使用synchronized关键字修饰代码块儿或方法;

说明:操作共享数据的代码,即为需要被同步的代码;

           共享数据:多个线程共同操作的数据或变量;

           同步器监视:俗称“锁”。任何一个类的对象,都可以充当锁。  要求:多个线程必须使用同一个锁。

优点:解决了线程的安全问题。

缺点:效率会降低;可能会导致死锁

2.使用lock锁:实例化一个reentrantlock对象,手动启用lock方法,结束时需手动调用unlock方法。

上一篇:Redis分布式锁失效的场景


下一篇:InnoDB存储引擎+[可重复读]事务隔离级别即可避免幻读的发生,不需[串行化]