这个可以通过修改数据的时间来判断。例如:表中有个字段读取时间。当这个客户读取10条数据的时候,更新读取时间为当前时间。然后下个客户读取的时候,判断时间在半个小时内,没有更新的数据。就OK了。
例如:一个线程正准备往进去写数据,突然切到另一个线程它先写了进入,在切回来这个线程并不知道这个位置已经写入了数据,所以它还是会傻傻的写入数据,这样另一个线程的数据就被覆盖了。如果是一边添加 ,一边遍历的话程序会产生ConcurrentModificationException异常。所以要用copyonwritearraylist是最好的选择,但是注意的是,添加元素时它的性能不是很好 。
你的属性在初始化时,构造方法还没有执行,此时new Find(x,a,b)中参数的值还是空的,所以出现你那个错误。线程类应该改为:class ThdFind extends Thread {
protected int a, b, x
protected int p[] = new int[10000]
Find findson = null
public ThdFind(int p[], int a, int b) {
this.a = a
this.b = b
this.p = p
findson = new Find(x, a, b)
}
public void run() {
findson.f(p)
}
}