1、您可以试想一下,如果不解决一个值被多次修改,您的朋友通过柜台操作您的账户,您通过取款机操作您的银行卡账户,您的账户有1000,当系统第一查询的时候,您的账户都是有钱的,您们两个同时取钱,那么两次取款都会成功。
2、这个过程会有可能发生线程安全的问题。因此,在银行等对数字比较敏感的行业中,是不允许这种事发生的。
3、为了解决这个问题,通常采取的措施是不让一条数据被同时修改。
4、我们创建一个类,并在类中创建一个可以执行代码的main方法。
5、创建两个新的线程。如下图所示:
6、接下来,我们创建一个匿名内部类,用来重写run方法。将业务逻辑放入其中即可。
7、我们这里做一个while循环,让线程多次去执行while循环。
8、在java中,我们采用互斥锁的方式,让数据只能同时被一个人操作,第二个人要操作,他酋篚靶高需要等待这个个人操作完成后,他才能操作,这样就解决了线程安全问题。
9、在java中,我们线程锁使用的是synchronized.您可以将其加在方法中,给整个方法都加锁。
10、也可以将关键部分放到一个互斥锁中,当多次操作同时进行时候,等待之前用户操作完成后,下一个用户或是下一次操作再继续。
11、以上既是多线程中比较常用的互斥锁,他可以解决一个时间点多次操作而带来的线程安全问题。