CopyOnWriteArrayList 大小改变
CopyOnWriteArrayList size changing
当所有访问同一个 CopyOnWriteArrayList 的方法 render、update 和 majorUpdate 都是 运行 render 工作正常,但 update 和 majorUpdate 打印 CopyOnWriteArrayList 的长度为 0。
这是代码:
package main.world.layer;
import main.world.tile.ITile;
import org.newdawn.slick.Graphics;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
public class Layer {
private List<ITile> tiles = new CopyOnWriteArrayList<ITile>();
public void add(ITile tile){
tiles.add(tile);
}
public void remove(ITile tile){
tiles.remove(tile);
}
public void render(ITile tile, Graphics graphics){
tile.render(graphics);
}
public void render(Graphics graphics){
for(ITile tile : tiles){
render(tile, graphics);
}
}
public List<ITile> getTiles() {
return tiles;
}
public void majorUpdate(ITile tile){
tile.onMajorUpdate();
}
public void majorUpdate(){
System.out.println("MAJOR UPDATE! " + tiles.size());
for(ITile tile : tiles){
majorUpdate(tile);
System.out.println("major update");
}
}
public void update(ITile tile, int delta){
tile.update(delta);
}
public void update(int delta){
System.out.println("update " + tiles.size());
for(ITile tile : tiles){
update(tile, delta);
System.out.println("update");
}
}
}
如果尺寸打印为零,那么您要打印的 tiles
为零。很可能您正在打印一个列表的大小,同时在另一个列表上执行渲染、更新、主要更新。
当所有访问同一个 CopyOnWriteArrayList 的方法 render、update 和 majorUpdate 都是 运行 render 工作正常,但 update 和 majorUpdate 打印 CopyOnWriteArrayList 的长度为 0。 这是代码:
package main.world.layer;
import main.world.tile.ITile;
import org.newdawn.slick.Graphics;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
public class Layer {
private List<ITile> tiles = new CopyOnWriteArrayList<ITile>();
public void add(ITile tile){
tiles.add(tile);
}
public void remove(ITile tile){
tiles.remove(tile);
}
public void render(ITile tile, Graphics graphics){
tile.render(graphics);
}
public void render(Graphics graphics){
for(ITile tile : tiles){
render(tile, graphics);
}
}
public List<ITile> getTiles() {
return tiles;
}
public void majorUpdate(ITile tile){
tile.onMajorUpdate();
}
public void majorUpdate(){
System.out.println("MAJOR UPDATE! " + tiles.size());
for(ITile tile : tiles){
majorUpdate(tile);
System.out.println("major update");
}
}
public void update(ITile tile, int delta){
tile.update(delta);
}
public void update(int delta){
System.out.println("update " + tiles.size());
for(ITile tile : tiles){
update(tile, delta);
System.out.println("update");
}
}
}
如果尺寸打印为零,那么您要打印的 tiles
为零。很可能您正在打印一个列表的大小,同时在另一个列表上执行渲染、更新、主要更新。