当前位置:编程学习 > JAVA >>

同步问题,多个电脑同时访问如何不冲突地生成各自序号?

多台电脑同时进入一个JAVA服务器的JSP页面

有个类叫GenerateNo
它有个方法叫getNo

怎么写能直接实现这么多电脑互不冲突?

public synchronized  String getNo() 我这么写能好使不
{
   //更改数据库某表里一个字段,使其加1并输出显示
}

能实现多人互不冲突否? 不能实现的话,应该如何修改写法? --------------------编程问答-------------------- 自己顶 --------------------编程问答-------------------- 为什么不用session啊,sessionId肯定唯一啊 --------------------编程问答-------------------- JSP中有个类?什么意思?在jsp上写类? --------------------编程问答--------------------
引用楼主 yueyue73 的回复:
多台电脑同时进入一个JAVA服务器的JSP页面

有个类叫GenerateNo
它有个方法叫getNo

怎么写能直接实现这么多电脑互不冲突?

public synchronized  String getNo() 我这么写能好使不
{
   //更改数据库某表里一个字段,使其加1并输出显示
}

能实现多人互不冲突否? 不能实现的话,应该如何修改写法?


不好使。 --------------------编程问答-------------------- 这样不行吗?

public synchronized static long getNo()
{...}
--------------------编程问答--------------------
引用 5 楼 pease 的回复:
这样不行吗?
Java code

public synchronized static long getNo()
{...}



必须是STATIC吗???? 不是的话可以 不? --------------------编程问答-------------------- 可以 synchronized  同步方法!只有一条线程能够进入执行 --------------------编程问答-------------------- 比如 A B C 3台电脑同时操作一个方法 synchronized  test(){}

当A进入操作的时候,该方法锁死。B,C 进入等待 。A 操作完,方法释放锁  B 或C 其中一个进入操作!以此类推。所以不会产生冲突! 

至于static 和 非 static 的区别,无非就是加载的前后问题。调用时候 直接类调用跟对象调用的区别。跟线程无关 --------------------编程问答-------------------- 如果不想加入锁。那这台电脑在请求的时候把MAC地址和时间戳带上,并通过这个两个值hash出来一个唯一ID。多台电脑的MAC地址一定不同,并且时间戳也不同。由于没有并发访问同一数据,这个方法是应该线程安全的。 --------------------编程问答--------------------
引用 8 楼 cyl713 的回复:
比如 A B C 3台电脑同时操作一个方法 synchronized  test(){}

当A进入操作的时候,该方法锁死。B,C 进入等待 。A 操作完,方法释放锁  B 或C 其中一个进入操作!以此类推。所以不会产生冲突! 

至于static 和 非 static 的区别,无非就是加载的前后问题。调用时候 直接类调用跟对象调用的区别。跟线程无关


扯谈!

首先,JSP会被翻译成一个Servlet类。
Servlet类的实例化由WEB容器完成,
容器是否实多次例化同一个Servlet类,JSR没有规定,
而是依赖于容器实现。

其次,方法getNo()内
 //更改数据库某表里一个字段,使其加1并输出显示

这也有问题,
比方说,这个WEB程序被部署在两台Server上,
如果还有其他程序在同时访问和修改这张表就会产生问题。

--------------------编程问答-------------------- LZ的本质需要,是数据库层面的自增序列。

WEB 层面的访问控制都是无效的。 --------------------编程问答-------------------- 对了,还有数据库的行锁定问题 --------------------编程问答-------------------- 如果每个电脑的ID都不同,那么只要不是很大的并发量,是不会发生行级锁定的。
补充:Java ,  Web 开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,