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

问题描述

高手请进!!!---线程安全问题,怎么解决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();
        }
    }
}

}

解决方案

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

解决方案二:

String s="" 和 new String("")是不一样,new String("")即使字符串值相同在虚拟机也是不同的对象。
synchronized (serNo) {}锁住的serNo对象,不同的serNo对象多线程自然会有问题。

解决方案三:


public synchronized static void pay
方法加上synchronized 就行了

或者这样
private static Object lock= new Object();
public static void pay(String serNo){
synchronized (lock) {
System.out.println(Thread.currentThread().getName() + "," );
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

时间: 2024-08-18 02:11:41

多线程-高手请进!!!---线程安全问题,怎么解决new String 问题的相关文章

【高手请进】:怎样解决调用迅雷组件弹出窗口

问题描述 我现调用迅雷组件下载文件,问题是要弹出那个确认窗口.问: 怎样解决或者取消这个窗口? 有什么办法可以模拟? 解决方案 解决方案二:再看一下

高手请进,我急需解决这问题~

问题描述 在运行网站的时候,查询员工信息出现下面的错误!(0x80004005)未指定的错误/myweb/Employee/EmployeeInformation.asp,第19行/myweb/Employee/EmployeeInformation.asp,第49行,代码如下:<%@Language=VBScript%><%'判断用户是否登录ifisempty(Session("ID"))thenResponse.Redirect"../login.asp

Oracle数据库连接问题,高手请进。

问题描述 先贴代码.Command=Connection.CreateCommand();Command.CommandText=string.Format("select{0}.nextvalfromdual",country.SequenceName);intid=int.Parse(Command.ExecuteScalar().ToString());if(cellarray.ContainsKey("ID"))cellarray["ID"

php curl采集高手请进

问题描述 php curl采集高手请进 http://www.lecai.com/ 这个网站怎么用php/url技术进行模拟登录?求参考程序..... 解决方案 我大致看了一下,个人习惯使用Snoopy.class.php模拟登陆,觉得不好可以忽略 POST http://www.lecai.com/user/ajax_login.php HTTP/1.1Host: www.lecai.comUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:3

微积分-vc 数字图像处理高手请进!

问题描述 vc 数字图像处理高手请进! 图像的梯度锐化 看到上面的公式,我叫一个晕,请问这是哪里才能学到呀?什么意思呀?还需要学习微积分吗? 解决方案 这个公式你仔细琢磨就懂了,第一个实际上是数字的差分,求得是点(i,j)的x和y方向的微分值的和,这里理解为这个像素点的梯度值.第二个就是锐化的过程,当梯度值大于某个阈值时,锐化的结果即此点的梯度值,若梯度小于那个阈值,则锐化的结果是原像素的值. 像这类比较基础的图像处理方法,建议你看一下清华大学章毓名教授写的<图像工程>. 解决方案二: 数字图

apt-ubuntu 高手请进,yara not found

问题描述 ubuntu 高手请进,yara not found 用apt-get intstall yara后,还是出现了configure: error: yara not found 请问为什么会这样,好烦啊,在线求高手解答 解决方案 spt-get install 是安装命令, 如果系统没有找到 yara 的安装包,就会这样. 查查 ubuntu 的在线安装配置. 解决方案二: 一个是看是否安装成功,其次看安装的yara能否执行,有没有错误.

c语言-C语言高手请进:这个分块求和C语言程序问题出在哪里??对一组无规律数据按正数、负数和零分块求和,

问题描述 C语言高手请进:这个分块求和C语言程序问题出在哪里??对一组无规律数据按正数.负数和零分块求和, 对一组无规律数据按正数.负数和零分块求和,即要求将序列中相邻的正数.零及负数分块累加输出,格式要求: 源数据: 2,3,8,6,0,0,-2,-1,-4,0,5,6,7,-5,-2,...(共100个) 整理输出为: 2,5,13,19,0,0,-2,-3,-7,0,5,11,18,-5,-7...(共100个) 以下程序哪里出了问题?我搞了2星期,总是得不到完整输出: int main(

高分悬赏 请大神指导-VBA高手请进 懂得webbrowser

问题描述 VBA高手请进 懂得webbrowser 请问如何通过VBA能够获取网页弹出窗体的Docuement对象,我是要操作弹出窗体里面的一线控件完成自动复制! 我现在可以获取到主页面的Document对象.

hbm-Hibernate 帅哥高手请进...关于Hibernate的三表关联,在线等...

问题描述 Hibernate 帅哥高手请进...关于Hibernate的三表关联,在线等... 表1: File (FID,Fname) 表2: UserGroup(GID,Gname) 表3: ActionPermissions(PID,Pname) 表4: File_Group_Permissions(ID,FID,GID,PID) 用四个表完成给某个文件指定用户组每个用户组指定权限,一文件对应多个用户组 每个用户组针对这个文件有不同的操作权限.Hibernate应该如何配置,表结构是否合理