1. Vector删除元素
在删除集合中的元素时,我习惯使用 collection.remove( obj ) 这种形式来删除,当删除一个元素时并不会发生什么问题,但如果是在多线程程序中删除则经常会抛出一些异常:ConcurrentModifactionException
例:
for( Bullet bullet : bullets ){
bullet.move();
if( !bullet.isDiscard ){
bullets.remove( bullet );
}
}
或:
for( int i=0; i<bullets.size(); i++ ){
Bullet bullet = bullets.get( i );
bullet.move();
if( bullet.isDiscard ){
bullets.remove( i );
}
}
我解决这个异常的方法是使用迭代,如下:
public synchronized void move( int ex ){
Iterator<Bullet> it = bullets.iterator();
while( it.hasNext() ){
Bullet bullet = it.next();
bullet.move();
if( bullet.isDiscard ){
it.remove();
}
}
}
2. MediaTracker的用法
跟踪多媒体对象状态的实用工具类,媒体对象包括音频剪辑和图像,但目前只支持图片
addImage( int id ) 向此媒体跟踪器正在跟踪的列表添加一个图像
addImage( int id, int width, height )
cheakAll() 查看此媒体跟踪器正在跟踪的所有图像是否已完成加载。
checkID() 检查由此媒体跟踪器跟踪且使用指定标识符标记的所有图像是否已完成加载
removeImage( image ) 从此媒体跟踪器移除指定的图像。
waitForAll() 开始加载由此媒体跟踪器跟踪的所有图像。
waitForId() 开始加载由此媒体跟踪器跟踪且具有指定标识符的所有图像。