java使用synchronized进行同步

来源:互联网 发布:专业调色软件app 编辑:程序博客网 时间:2024/06/06 16:56

提到同步就离不开多线程——即多线程抢占资源时要保证线程的安全。

简单例子:如有一个全局变量int sum=1,有两个(A、B)线程对其进行操作,他们获取该资源时都是sum=1,而A线程对其进行加1写回去变成sum=2,如我们希望的是B线程对其也进行加1的话为sum=3,但是因为B线程获取到时是sum=1,所以进行加1写回去也是sum=2。为了解决类似的问题,引入了锁的概念——即在一个线程操作时进行锁定,暂时不给别的资源操作直到其释放。

先看几个概念:

1、单机

(a) 实例级:一般是没有static的都为实例锁,或者写法为 synchronized(this) {}

(b) 类级:一般没有static的都为实例锁,或者写法为 synchronized(AAA.class) {}

2、分布式(多机)

当系统是分布式的架构时,单机的方法就不管用了,一般如下方案

(a) 使用数据库

(b) 使用redis缓存

(c) 使用zookeeper

3、例子:使用synchronized进行同步

java使用synchronized进行同步

java使用synchronized进行同步

java使用synchronized进行同步

解决方案:加入同步

java使用synchronized进行同步

前面我们是只有一个实例,如果是两个实例呢?

java使用synchronized进行同步

解决方案:加上类级锁

java使用synchronized进行同步

0 0