相同的字符串可以作为同步锁对象

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