code: public Tile getTile (int tileIndex, Colorization[] zations)
      {
          Tile tile = null;
  
          // first look in the active set; if it's in use by anyone or in the cache, it will be in
          // the active set
          synchronized (_atiles) {
              _key.tileSet = this;
              _key.tileIndex = tileIndex;
              _key.zations = zations;
              SoftReference<Tile> sref = _atiles.get(_key);
              if (sref != null) {
                  tile = sref.get();
              }
          }
  
          // if it's not in the active set, it's not in memory; so load it
          if (tile == null) {
              tile = createTile();
              tile.key = new Tile.Key(this, tileIndex, zations);
              initTile(tile, tileIndex, zations);
              synchronized (_atiles) {
                  _atiles.put(tile.key, new SoftReference<Tile>(tile));
              }
          }
  
          // periodically report our image cache performance
          reportCachePerformance();
  
          return tile;
      }
docs: Creates a {@link Tile} object from this tileset corresponding to the specified tile id and
  returns that tile. A null tile will never be returned, but one with an error image may be
  returned if a problem occurs loading the underlying tileset image.
  
  @param tileIndex the index of the tile in the tileset. Tile indexes start with zero as the
  upper left tile and increase by one as the tiles move left to right and top to bottom over
  the source image.
  @param zations colorizations to be applied to the tile image prior to returning it. These
  may be null for uncolorized images.
  
  @return the tile object.