线程中的while(true){
if(mdat.lists.size()>0)//mdat是静态变量
}
///执行中mdat的数据会增加
//我有另一个线程一直在打印mdat的size是>0的
//但是在线程中的if就是进不去,只有在while中Thread.sleep(100);才能进入
//我想知道是什么原因造成的Java多线程
if(mdat.lists.size()>0)//mdat是静态变量
}
///执行中mdat的数据会增加
//我有另一个线程一直在打印mdat的size是>0的
//但是在线程中的if就是进不去,只有在while中Thread.sleep(100);才能进入
//我想知道是什么原因造成的Java多线程
我也试过了,在不sleep的情况下,在静态变量被修改后,一直打印了近1分钟都没进入if去处理前面几位说的使用锁没有试过,但看到这个锁我就不太想使用
我也试过了,在不sleep的情况下,在静态变量被修改后,一直打印了近1分钟都没进入if去处理前面几位说的使用锁没有试过,但看到这个锁我就不太想使用你是否正确对静态变量mdat成功得赋值?
是可以试着debug一下,看看当线程跑到 if(mdat.list.size()>0)的时候,mdat的内存是什么?举个例子,你在另一个线程,以参数引用的方式,对mdat进行赋值,但是因为某些错误的写法,其实没有真正把内容写入到静态变量mdat中,于是在本线程,mdat一直都是空的。。仅供参考。。
我也试过了,在不sleep的情况下,在静态变量被修改后,一直打印了近1分钟都没进入if去处理前面几位说的使用锁没有试过,但看到这个锁我就不太想使用你是否正确对静态变量mdat成功得赋值?
是可以试着debug一下,看看当线程跑到 if(mdat.list.size()>0)的时候,mdat的内存是什么?举个例子,你在另一个线程,以参数引用的方式,对mdat进行赋值,但是因为某些错误的写法,其实没有真正把内容写入到静态变量mdat中,于是在本线程,mdat一直都是空的。。仅供参考。。赋值是使用list.add方法赋值后打印出来size,是成功赋值的
环境是
jdk6,linux 运行参数是 jar -server
extends java.lang.Thread
http://www.blogjava.net/xylz/archive/2010/07/03/325168.html在这里,楼主可以尝试使用线程安全的集合就可以了。
例如List list = Collections.synchronizedList(new ArrayList());