jielinvsx 2014-07-19 06:18 采纳率: 0%
浏览 2041

高手请进!!!---线程安全问题,怎么解决new String 问题

场景是:一个订单号只能一个在付款,只能一个线程处理,不同的订单号支持并发处理

现在如果是new String("20140719140818");就有问题怎么解决

如果不是new出来的,什么情况会出现问题

public class Test {

public static void main(String[] args) {
    new Thread(){
        public void run(){
            pay("20140719140818");
        }
    }.start();
    new Thread(){
        public void run(){
            pay("20140719140818");
        }
    }.start();
    new Thread(){
        public void run(){
            pay("20140719140818");
        }
    }.start();
}

public static void pay(String serNo){
    synchronized (serNo) {
        System.out.println(Thread.currentThread().getName() + "," + name);
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

}

  • 写回答

3条回答 默认 最新

  • 七脉 2014-07-19 08:33
    关注

    你的pay(String str);这个方法中是有比较语句,如果有的话,我估计你用的是str==....,把==改成str.equals("....")

    评论

报告相同问题?

悬赏问题

  • ¥30 matlab解优化问题代码
  • ¥15 写论文,需要数据支撑
  • ¥15 identifier of an instance of 类 was altered from xx to xx错误
  • ¥100 反编译微信小游戏求指导
  • ¥15 docker模式webrtc-streamer 无法播放公网rtsp
  • ¥15 学不会递归,理解不了汉诺塔参数变化
  • ¥15 基于图神经网络的COVID-19药物筛选研究
  • ¥30 软件自定义无线电该怎样使用
  • ¥15 R语言mediation包做中介分析,直接效应和间接效应都很小,为什么?
  • ¥15 Jenkins+k8s部署slave节点offline