现在开发的系统中有个需求,当多个用户登陆时,一段代码对数据库操作,希望同一时间只能有
一个用户访问.
我用Thread测试过,不可以实现的!(1)ThreadTest.java:public class ThreadTest implements Runnable 

private String userId;

public ThreadTest(String userId){

this.userId = userId;
}


public synchronized void run()

for(int i= 0;i<10;i++){
int j=0;
while(j<599999999){

j++;

} System.out.println(userId+"==="+i+"=========");

}
} } 
(2)TestTherd.jsp:<%@ page contentType="text/html; charset=GBK"%>
<%@ include file="../Common/CharsetPage.jsp" %>
<%@ page import="com.j2ee.thread.ThreadTest"%>
<html>
<%try{ String userId = javabean.newcredit.quota.QueryCommon.getSessionValue(
request, "bizuserId");

ThreadTest r = new ThreadTest(userId);

Thread t1 = new Thread(r); 

t1.start();
t1.join();}catch(Exception e){ e.printStackTrace();
}
 %>
</html>当2个不同用户同时访问这个jsp的时候.还是同时执行,不能等待 run() 方法执行完再执行.
请高手指教!!!!谢谢了
有没有更好的办法??

解决方案 »

  1.   

    一段代码对数据库操作,希望同一时间只能有
    一个用户访问. 我们还有synchronized 啊!记得这样用
    private static final Object lock = new Object();
    public void run() {
      synchronized(lock){
      ....用静态的同步锁就可以简单实现。 如果需要多个,比如允许2个线程同时访问,最好用信号量
      

  2.   

    定义一个application范围的变量,有用户正在使用则设置为true,使用后设置false,然后再有用户使用时先判断这个值,然后再让用户使用。
    试试