public T get(int id) {
		if (id < 0) {
			return null;
		}

		T definition = cache.get(id);
		if (definition == null) {
			synchronized (lock) {
				definition = cache.get(id);
				if (definition == null) {
					try {
						definition = loader.load(id);
						cache.put(id, definition);
					} catch (Exception ignored) {
					}
				}
			}
		}
		return definition;
	}