Android 匿名内部类线程的集合同步引发空指针异常
当我的内部类尝试对基类中包含的集合进行“同步”时,Android JVM抛出空指针异常。如果我删除了对synchronized的调用,代码工作正常。当然,并发稍后会让我大吃一惊,所以我需要找到一个解决方案 我是android新手,但对Java并不陌生。observer模式的这种实现在Java中一直对我有效。如果我必须显式地将我的基类传递到一个非匿名类中,我会这样做,但这真是一个麻烦。我还可以创建一个新的更新函数,并从基类内部同步调用,但这一要求似乎违反了匿名类中应该允许的访问规则Android 匿名内部类线程的集合同步引发空指针异常,android,Android,当我的内部类尝试对基类中包含的集合进行“同步”时,Android JVM抛出空指针异常。如果我删除了对synchronized的调用,代码工作正常。当然,并发稍后会让我大吃一惊,所以我需要找到一个解决方案 我是android新手,但对Java并不陌生。observer模式的这种实现在Java中一直对我有效。如果我必须显式地将我的基类传递到一个非匿名类中,我会这样做,但这真是一个麻烦。我还可以创建一个新的更新函数,并从基类内部同步调用,但这一要求似乎违反了匿名类中应该允许的访问规则 public
public class BaseClass
{
private ArrayList<IListenerInterface> myListeners = new ArrayList<IListenerInterface>();
public BaseClass()
{
StartWorker();
}
public void addListener(IListenerInterface listener)
{
synchronized(myListeners)
{
myListeners.add(listener);
}
}
public void StartWorker()
{
Thread myThread = new Thread(new Runnable() {
public void run() {
while(true)
{
// ... blocks here until work to be done
// then...do some work ....
// now try to update the listeners
synchronized(myListeners) // <-- NULL POINTER EXCEPTION Call back to the enclosing classes myListeners collecion
{
// never get to this point...
myListeners.Update(someWork);
}
}
}
});
}
}
公共类基类
{
私有ArrayList myListeners=新ArrayList();
公共基类()
{
StartWorker();
}
公共void addListener(IListenerInterface侦听器)
{
已同步(myListeners)
{
添加(侦听器);
}
}
公开作废StartWorker()
{
Thread myThread=新线程(new Runnable()){
公开募捐{
while(true)
{
//…在此阻塞,直到完成工作
//然后…做一些工作。。。。
//现在尝试更新侦听器
同步(myListeners)/奇怪的行为。。
首先,我会尝试使用final
modificator引用侦听器列表,以避免修改该引用。之后,我希望通过在this
上同步而不是在myListeners
上同步,使类“线程安全”