同時起動スレッド数の制御

戻る
$ 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();
        }
    }
}

戻る

inserted by FC2 system