现在开发的系统中有个需求,当多个用户登陆时,一段代码对数据库操作,希望同一时间只能有
一个用户访问.
我用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() 方法执行完再执行.
请高手指教!!!!谢谢了
有没有更好的办法??
一个用户访问.
我用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() 方法执行完再执行.
请高手指教!!!!谢谢了
有没有更好的办法??
解决方案 »
- JAVA web关于Cookie的问题
- 新手关于JSP跳转传值的问题
- 求实现动态下拉菜单选项代码!~
- 在weblogic 9.2下面怎样发布一个.war包? 谢谢!
- 使用jstl怎么在两个页面间传值
- 关于session的问题
- java.lang.OutOfMemoryError: Java heap space 大家帮忙找原因
- jsp怎么调用java程序(java实现数据库的连接提取数据库数据)把数据用表格显示出来
- [求教]关于struts2.0.12中datetimepicker无法显示的问题!
- 如何获取客户机的IP地址和MAC地址??急!急!!!!!!!!
- iframe遮盖
- 怎样用div把select框盖住?
一个用户访问. 我们还有synchronized 啊!记得这样用
private static final Object lock = new Object();
public void run() {
synchronized(lock){
....用静态的同步锁就可以简单实现。 如果需要多个,比如允许2个线程同时访问,最好用信号量
试试