01: /*
02: * <copyright>
03: *
04: * Copyright 1997-2004 BBNT Solutions, LLC
05: * under sponsorship of the Defense Advanced Research Projects
06: * Agency (DARPA).
07: *
08: * You can redistribute this software and/or modify it under the
09: * terms of the Cougaar Open Source License as published on the
10: * Cougaar Open Source Website (www.cougaar.org).
11: *
12: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
13: * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
14: * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
15: * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
16: * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
17: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
18: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
19: * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
20: * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21: * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
22: * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23: *
24: * </copyright>
25: */
26: package org.cougaar.core.thread;
27:
28: import org.cougaar.core.component.ParameterizedComponent;
29: import org.cougaar.core.component.ServiceBroker;
30: import org.cougaar.core.service.LoggingService;
31: import org.cougaar.core.service.ThreadControlService;
32:
33: /**
34: * This Component limits the number of threads that an agent can use
35: * to run its schedulables in parallel. This should loaded into all
36: * agents. Note that if the more than the given number of threads are
37: * already running when this loads, the limiting won't become
38: * effective until some of them stop.
39: *
40: * JAZ this has not been tested with mobility yet.
41: */
42: public class LimitThreadsPlugin extends ParameterizedComponent // not really a Plugin
43: {
44: private static final long MAX_THREADS = 5;
45: private ServiceBroker sb;
46:
47: public LimitThreadsPlugin() {
48: super ();
49: }
50:
51: public void setServiceBroker(ServiceBroker sb) {
52: this .sb = sb;
53: }
54:
55: public void load() {
56: super .load();
57:
58: ThreadControlService tsvc = (ThreadControlService) sb
59: .getService(this , ThreadControlService.class, null);
60: LoggingService lsvc = (LoggingService) sb.getService(this ,
61: LoggingService.class, null);
62:
63: int lane = (int) getParameter("lane", tsvc.getDefaultLane());
64: int maxThreads = (int) getParameter("maxThreads", MAX_THREADS);
65: tsvc.setMaxRunningThreadCount(maxThreads, lane);
66:
67: if (lsvc.isDebugEnabled())
68: lsvc.debug("Setting Max Threads to " + maxThreads
69: + "for lane " + lane);
70:
71: sb.releaseService(this , ThreadControlService.class, tsvc);
72: sb.releaseService(this , LoggingService.class, lsvc);
73: }
74:
75: }
|