1.谈谈你对同步代码块中同步监视器和共享数据的理解以及各自要求?
同步监视器:俗称锁。①任何一个类的对象都可以充当;②多个线程共用同一把锁。
共享数据:多个线程共同操作的数据。
2.什么情况会产生线程安全问题?
当多个线程同时共享同一个数据,做写的操作时,可能会发生数据冲突问题,即产生线程安全问题。读的操作不会发生线程安全问题。
(比如A在银行取钱,查询起初余额balance=5000;准备取3000;在做取钱操作的时候发生阻塞了,此时A女朋友也用A的账户查询balance=5000;开始取4000,balance更新为1000,取钱成功;A阻塞完成,开始取3000,balance更新为-2000,取钱成功。
3.如何解决线程安全问题?有几种方式?
当线程A在操作共享数据时,其他进程不能参与进来,直到线程A操作完成时,其他线程才可以开始操作共享数据。这种情况即使线程A出现了阻塞也不能被改变。
使用synchronized同步机制或lock锁方式解决。
有两种方式:1.synchronized同步代码块/同步方法
//同步代码块:
synchronized(/*同步监视器*/