多台电脑同时进入一个JAVA服务器的JSP页面有个类叫GenerateNo
它有个方法叫getNo怎么写能直接实现这么多电脑互不冲突?public synchronized  String getNo() 我这么写能好使不
{
   //更改数据库某表里一个字段,使其加1并输出显示
}能实现多人互不冲突否? 不能实现的话,应该如何修改写法?

解决方案 »

  1.   

    为什么不用session啊,sessionId肯定唯一啊
      

  2.   

    JSP中有个类?什么意思?在jsp上写类?
      

  3.   

    这样不行吗?public synchronized static long getNo()
    {...}
      

  4.   

    必须是STATIC吗???? 不是的话可以 不?
      

  5.   

    可以 synchronized  同步方法!只有一条线程能够进入执行
      

  6.   

    比如 A B C 3台电脑同时操作一个方法 synchronized  test(){}当A进入操作的时候,该方法锁死。B,C 进入等待 。A 操作完,方法释放锁  B 或C 其中一个进入操作!以此类推。所以不会产生冲突! 至于static 和 非 static 的区别,无非就是加载的前后问题。调用时候 直接类调用跟对象调用的区别。跟线程无关
      

  7.   

    如果不想加入锁。那这台电脑在请求的时候把MAC地址和时间戳带上,并通过这个两个值hash出来一个唯一ID。多台电脑的MAC地址一定不同,并且时间戳也不同。由于没有并发访问同一数据,这个方法是应该线程安全的。
      

  8.   


    扯谈!首先,JSP会被翻译成一个Servlet类。
    Servlet类的实例化由WEB容器完成,
    容器是否实多次例化同一个Servlet类,JSR没有规定,
    而是依赖于容器实现。其次,方法getNo()内
     //更改数据库某表里一个字段,使其加1并输出显示这也有问题,
    比方说,这个WEB程序被部署在两台Server上,
    如果还有其他程序在同时访问和修改这张表就会产生问题。
      

  9.   

    LZ的本质需要,是数据库层面的自增序列。WEB 层面的访问控制都是无效的。