同時起動スレッド数の制御
戻る
$ tree
.
|-- RCS
| |-- ThreadManager.sh,v
| |-- UnitTest.sh,v
| |-- build.xml,v
| `-- indent.sh,v
|-- ThreadManager.jar
|-- ThreadManager.sh
|-- UnitTest.sh
|-- build.xml
|-- classes
| `-- TM
| |-- Client.class
| |-- Service.class
| `-- ThreadManager.class
|-- docs
| |-- TM
| | |-- Client.html
| | |-- Service.html
| | |-- ThreadManager.html
| | |-- package-frame.html
| | |-- package-summary.html
| | `-- package-tree.html
| |-- allclasses-frame.html
| |-- allclasses-noframe.html
| |-- constant-values.html
| |-- deprecated-list.html
| |-- help-doc.html
| |-- index-all.html
| |-- index.html
| |-- overview-tree.html
| |-- package-list
| |-- resources
| | `-- inherit.gif
| `-- stylesheet.css
|-- indent.sh
`-- src
`-- TM
|-- Client.java
|-- RCS
| |-- Client.java,v
| |-- Service.java,v
| `-- ThreadManager.java,v
|-- Service.java
`-- ThreadManager.java
9 directories, 35 files
::::::::::::::
ThreadManager.sh
::::::::::::::
#!/bin/sh
java -cp ThreadManager.jar TM.Client
::::::::::::::
UnitTest.sh
::::::::::::::
#!/bin/sh
if [ $# != 1 ] ; then
echo "USage: $0 [packageName.className]"
exit 1
fi
CLASSNAME=$1
java -cp ThreadManager.jar ${CLASSNAME}
::::::::::::::
indent.sh
::::::::::::::
#!/bin/sh
# $Id: thread-count-control.html,v 1.1 2009/06/22 16:12:29 kishi Exp kishi $
CURRENT_DIR=`pwd`
echo ${CURRENT_DIR}
for JAVA in `find . -name "*.java"` ; do
DIR=`dirname ${JAVA}`
cd ${DIR}
TARGET=`basename ${JAVA}`
astyle -j -a -P ${TARGET} && vu.sh ${TARGET} && rm -f *.orig *.bak
cd ${CURRENT_DIR}
done
::::::::::::::
build.xml
::::::::::::::
<?xml version="1.0" encoding="Shift_JIS"?>
<!-- $Id: thread-count-control.html,v 1.1 2009/06/22 16:12:29 kishi Exp kishi $ -->
<project name="ThreadManager" default="jar" basedir=".">
<property name="src.dir" value="src"/>
<property name="classes.dir" value="classes"/>
<property name="javadoc.dir" value="docs"/>
<property name="jar.name" value="ThreadManager.jar"/>
<target name="jar" depends="compile">
<jar jarfile="${jar.name}" basedir="${classes.dir}"></jar>
</target>
<target name="compile">
<mkdir dir="${classes.dir}" />
<javac srcdir="${src.dir}" destdir="${classes.dir}"/>
</target>
<target name="javadoc" depends="compile">
<javadoc destdir="${javadoc.dir}" access="private">
<fileset dir="${src.dir}"/>
</javadoc>
</target>
<target name="clean">
<delete dir="${classes.dir}" />
<delete dir="${javadoc.dir}" />
<delete file="${jar.name}" />
</target>
</project>
::::::::::::::
Client.java
::::::::::::::
package TM;
/**
* $Id: thread-count-control.html,v 1.1 2009/06/22 16:12:29 kishi Exp kishi $
* @author KISHI Yasuhiro
*/
public class Client implements Runnable {
private void doRequest() {
ThreadManager.dispatch();
}
public void run() {
int count = 0;
while ( count++ < 10 ) {
doRequest();
try {
Thread.sleep( 100 );
} catch ( Exception e ) {
e.printStackTrace();
}
}
}
static public void main( String[] args ) {
Client[] clients = new Client[ 5 ];
for ( int i = 0;i < clients.length;i++ ) {
clients[ i ] = new Client();
new Thread( clients[ i ] ).start();
}
}
}
::::::::::::::
Service.java
::::::::::::::
package TM;
import java.util.*;
/**
* $Id: thread-count-control.html,v 1.1 2009/06/22 16:12:29 kishi Exp kishi $
* @author KISHI Yasuhiro
*/
public class Service implements Runnable {
public void run() {
Random random = new Random();
int sleepTime = Math.abs( random.nextInt() ) % 1000;
System.out.println( "sleepTime = " + sleepTime );
try {
Thread.sleep( sleepTime );
} catch ( Exception e ) {
e.printStackTrace();
}
ThreadManager.decrement();
}
public static void main( String[] args ) {
Service service = new Service();
new Thread( service ).start();
}
}
::::::::::::::
ThreadManager.java
::::::::::::::
package TM;
/**
* $Id: thread-count-control.html,v 1.1 2009/06/22 16:12:29 kishi Exp kishi $
* @author KISHI Yasuhiro
*/
public class ThreadManager {
static int count = 0;
static final int MAX = 10;
public static synchronized void increment()
throws Exception {
if ( count < MAX ) {
count++;
System.out.printf( "count=%2d\n", count );
} else {
throw new Exception( "Cannot create any more thread!" );
}
}
public static synchronized void decrement() {
count--;
System.out.printf( "count=%2d\n", count );
}
public static void dispatch() {
try {
increment();
Service service = new Service();
new Thread( service ).start();
} catch ( Exception e ) {
e.printStackTrace();
}
}
}
戻る