如果我们要写一个程序支持多人同时进行访问,那么线程安全和线程同步是一件非常重要的事情。举个例子如果酒店在预定软件上提供了各种房型信息,每个用户都可以进行预订,为了避免同一个房间被多个人预定,一个已经被预定的房间再次被预定这样的问题,我们需要对每个人的预定进行规范。线程同步就是对线程的在运行时的行为进行规范,当一个线程正在访问堆内存里的数据时,我们必须确保在同步代码块里的代码被完整的运行不会被其他线程打断。在java中可以通过使用Sychronized关键字来同步代码块或者同步某一个方法,但是在使用中我们需要确保每个被同步的线程被同一个监视器所监视,就好比说如果我们要规范考试时学生不作弊的行为,我们需要这些学生有一个共同的监考老师,如果每个学生自己监视自己那么时无法防止作弊行为的发生。另一种方法是通过lock对象来进行上锁和解锁。下面是通过一个抢票的例子运用lock对象来同步代码块的视频。
Screen Recording 2021-07-02 at 1.29.00 PM