public class TestSynch {
public static void main(String[] args) {
int threadNum=3;
String[] orders=new String[] {"2019001","2019002","2019003"};
TestSynch testSynch = new TestSynch();
for (int i = 0; i < threadNum; i++) {
for (int j = 0; j < orders.length; j++) {
String order = orders[j];
Thread t = new Thread(new Runnable() {
@Override
public void run() {
testSynch.paySuccess(order);
}
});
t.setName(order+"--"+i);
t.start();
}
}
}
public void paySuccess(String orderNumber) {
System.out.println(Thread.currentThread().getName()+":开始获取锁,订单号:"+orderNumber);
synchronized(orderNumber.intern()) {
System.out.println(Thread.currentThread().getName()+":获取到锁获取锁,订单号:"+orderNumber);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+":释放锁,订单号:"+orderNumber);
}
}
}
2019001--0:开始获取锁,订单号:2019001
2019003--0:开始获取锁,订单号:2019003
2019003--0:获取到锁获取锁,订单号:2019003
2019002--0:开始获取锁,订单号:2019002
2019001--0:获取到锁获取锁,订单号:2019001
2019002--0:获取到锁获取锁,订单号:2019002
2019001--1:开始获取锁,订单号:2019001
2019002--1:开始获取锁,订单号:2019002
2019003--1:开始获取锁,订单号:2019003
2019001--2:开始获取锁,订单号:2019001
2019002--2:开始获取锁,订单号:2019002
2019003--2:开始获取锁,订单号:2019003
2019003--0:释放锁,订单号:2019003
2019001--0:释放锁,订单号:2019001
2019001--2:获取到锁获取锁,订单号:2019001
2019002--0:释放锁,订单号:2019002
2019003--2:获取到锁获取锁,订单号:2019003
2019002--2:获取到锁获取锁,订单号:2019002
2019001--2:释放锁,订单号:2019001
2019001--1:获取到锁获取锁,订单号:2019001
2019002--2:释放锁,订单号:2019002
2019002--1:获取到锁获取锁,订单号:2019002
2019003--2:释放锁,订单号:2019003
2019003--1:获取到锁获取锁,订单号:2019003
2019001--1:释放锁,订单号:2019001
2019003--1:释放锁,订单号:2019003
2019002--1:释放锁,订单号:2019002