在分布式系统中,使用syncnized是没有用的,无法达到锁的效果。因为实例都运行在不同的机器上,syncrinized关键字是把锁加在当前的类或对象上。运行在不同额实例上的程序类对象什么的肯定是完全不一样的,下面即用一个简单的例子来证明:
首先搭建一个如下架构的简单测试环境:
1. 在虚拟机上安装并配置后一个nginx服务器,nginx的配置文件如下。
下面配置的192.168.0.112 server是我自己电脑的ip,我的IDEA就运行在这个ip上,我通过修改yml的端口号,在IDEA中启动了2个服务8080和8081。这里用到了nginx的负载均衡功能。
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream redistock {
server 192.168.0.112:8080 weight=1;
server 192.168.0.112:8081 weight=1;
}
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
proxy_pass http://redistock;
}
}
2. 下载安装redis,并启动一个redis服务,在redis中set一个stock值为50.
3. 在IDEA中用如下代码启动2个服务。
Application.java