public class RegManage {
private static byte[] lock = new byte[0]; // 为了锁而设定的内容
public String OnlyCheckQuota() throws Exception { synchronized (lock) { cnt=checkQuota();//读取数据库一张表的总数
if(cnt<100){
。。
//给表加一条记录
}
System.out.print("*******" + cnt + "^^^^^^^" + "\n");
//cnt是从数据库里面读取出来的一个总数,正常如果控制住了,总数会一个一个的加上去(1,2,3,4,5),没控制住,就会读出几个一样的总数(1,2,2,4,4,6)。
}
}}
在线程情况下,没有锁住,为什么,要怎么做呢。synchronized
private static byte[] lock = new byte[0]; // 为了锁而设定的内容
public String OnlyCheckQuota() throws Exception { synchronized (lock) { cnt=checkQuota();//读取数据库一张表的总数
if(cnt<100){
。。
//给表加一条记录
}
System.out.print("*******" + cnt + "^^^^^^^" + "\n");
//cnt是从数据库里面读取出来的一个总数,正常如果控制住了,总数会一个一个的加上去(1,2,3,4,5),没控制住,就会读出几个一样的总数(1,2,2,4,4,6)。
}
}}
在线程情况下,没有锁住,为什么,要怎么做呢。synchronized
2、除了方法前用synchronized关键字,synchronized关键字还可以用于方法中的某个区块中,表示只对这个区块的资源实行互斥访问。用法是: synchronized(this){/*区块*/},它的作用域是当前对象;
3、synchronized关键字是不能继承的,也就是说,基类的方法synchronized f(){} 在继承类中并不自动是synchronized f(){},而是变成了f(){}。继承类需要你显式的指定它的某个方法为synchronized方法;
这个应该是锁的作用域不对。虽然锁是lock ,但你有好多这样不同的锁,所以锁不住。
xxhhbb1538 你说可能是我没锁住的原因,不同线程使用了不同的RegManage 对象,那要解决这个问题要怎么办吗?把RegManage整个锁住?synchronized (RegManage.class) 这样??