С Eclipse Collections , все следующие будут работать:
import java.util.Map;
import org.eclipse.collections.api.map.ImmutableMap;
import org.eclipse.collections.api.map.MutableMap;
import org.eclipse.collections.impl.factory.Maps;
public class StaticMapsTest
{
private static final Map MAP =
Maps.mutable.with(1, "one", 2, "two");
private static final MutableMap MUTABLE_MAP =
Maps.mutable.with(1, "one", 2, "two");
private static final MutableMap UNMODIFIABLE_MAP =
Maps.mutable.with(1, "one", 2, "two").asUnmodifiable();
private static final MutableMap SYNCHRONIZED_MAP =
Maps.mutable.with(1, "one", 2, "two").asSynchronized();
private static final ImmutableMap IMMUTABLE_MAP =
Maps.mutable.with(1, "one", 2, "two").toImmutable();
private static final ImmutableMap IMMUTABLE_MAP2 =
Maps.immutable.with(1, "one", 2, "two");
}
Вы также можете статически инициализировать карты примитивов с Eclipse Collections.
import org.eclipse.collections.api.map.primitive.ImmutableIntObjectMap;
import org.eclipse.collections.api.map.primitive.MutableIntObjectMap;
import org.eclipse.collections.impl.factory.primitive.IntObjectMaps;
public class StaticPrimitiveMapsTest
{
private static final MutableIntObjectMap MUTABLE_INT_OBJ_MAP =
IntObjectMaps.mutable.empty()
.withKeyValue(1, "one")
.withKeyValue(2, "two");
private static final MutableIntObjectMap UNMODIFIABLE_INT_OBJ_MAP =
IntObjectMaps.mutable.empty()
.withKeyValue(1, "one")
.withKeyValue(2, "two")
.asUnmodifiable();
private static final MutableIntObjectMap SYNCHRONIZED_INT_OBJ_MAP =
IntObjectMaps.mutable.empty()
.withKeyValue(1, "one")
.withKeyValue(2, "two")
.asSynchronized();
private static final ImmutableIntObjectMap IMMUTABLE_INT_OBJ_MAP =
IntObjectMaps.mutable.empty()
.withKeyValue(1, "one")
.withKeyValue(2, "two")
.toImmutable();
private static final ImmutableIntObjectMap IMMUTABLE_INT_OBJ_MAP2 =
IntObjectMaps.immutable.empty()
.newWithKeyValue(1, "one")
.newWithKeyValue(2, "two");
}
Примечание: Я коммиттер Eclipse Collections
В своем классе обслуживания используйте ServiceBase.RequestAdditionalTime ()
в методе OnStart / OnStop:
// request an additional 4 seconds to complete the operation
RequestAdditionalTime(4000);
Обычный способ создания службы - это когда код запуска создает новый поток и запускает вашу службу в этом thread.
Запуск службы должен быть почти мгновенным - не что иное, как порождение нового потока с вашей «настоящей» работой.
Если вы тратите больше трех секунд, это признак того, что вы делаете реальная работа в вашем основном потоке, а не создание отдельного для вашей службы.
Что касается конкретного вопроса, то точное время ожидания варьируется, но составляет менее 30 секунд. Вы можете управлять тайм-аутом запуска службы по умолчанию с помощью ключа реестра, как это сделать , вы можете увидеть здесь .
Однако я соглашусь со многими другими, что я бы рассмотрел два возможных варианта.