相同的字符串可以作为synchronized同步锁对象
原创
©著作权归作者所有:来自51CTO博客作者java硕哥的原创作品,请联系作者获取转载授权,否则将追究法律责任
相同的字符串可以作为同步锁对象
static int cnt1 = 0;
static int cnt2 = 0;
static int cnt =0;
public static void calc(CrawlerMessageProcessed processed){
String name = processed.getName();
synchronized (name){
if(name.equals("21飞天")){
cnt1++;
}
if(name.equals("22飞天")){
cnt2++;
}
cnt++;
}
}
public static void main(String[] args) throws InterruptedException {
for (int i = 0; i < 50000; i++) {
CrawlerMessageProcessed processed = new CrawlerMessageProcessed();
processed.setName("21飞天");
new Thread(new Runnable() {
@Override
public void run() {
calc(processed);
}
}).start();
CrawlerMessageProcessed processed2 = new CrawlerMessageProcessed();
processed2.setName("22飞天");
new Thread(new Runnable() {
@Override
public void run() {
calc(processed2);
}
}).start();
}
Thread.sleep(5_000);
System.out.println("cnt1:"+cnt1+" , cnt2:"+cnt2+",cnt:"+cnt);
}
运行第1次结果
cnt1:50000 , cnt2:50000,cnt:99996
运行第2次结果
cnt1:50000 , cnt2:50000,cnt:99997
运行第3次结果
cnt1:50000 , cnt2:50000,cnt:99999