zoukankan      html  css  js  c++  java
  • java工程笔记

    start.sh

    #TITLE=jetty
    
    DEPLOY_PATH=$(cd $(dirname $0)/../ && pwd)
    export DEPLOY_PATH
    
    CLASSPATH=${CLASSPATH}:${DEPLOY_PATH}/lib/start.jar:${DEPLOY_PATH}/configs
    export CLASSPATH
    
    JAVA_OPTIONS="-server -XX:PermSize=64m -XX:MaxPermSize=128m -Xmx512m -Xms256m"
    export JAVA_OPTIONS
    
    DEBUG_PORT=8081
    export DEBUG_PORT
    
    JAVA_DEBUG="-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,address=${DEBUG_PORT},server=y,suspend=n"
    export JAVA_DEBUG
    
    ${JAVA_HOME}/bin/java ${JAVA_OPTIONS} ${JAVA_DEBUG} -Dclasspath=${DEPLOY_PATH}/lib -Dbasepath=${DEPLOY_PATH} com.dc.jetty.start.Start
    if [ "${doExitFlag}" = "true" ] ; then
        exit
    fi

    log4j.properties

    log4j.rootLogger=info,console,debug,info,warn,error,fatal
    
    log4j.appender.console=org.apache.log4j.ConsoleAppender 
    log4j.appender.console.layout=org.apache.log4j.PatternLayout 
    log4j.appender.console.layout.ConversionPattern=%d [%-5p]  (%F.%M:%L) - %m%n
    
    log4j.appender.debug=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.debug.File=./log/rest/rest_debug
    log4j.appender.debug.DatePattern='.'yyyyMMdd'.log'
    log4j.appender.debug.layout=org.apache.log4j.PatternLayout 
    log4j.appender.debug.layout.ConversionPattern=%d [%-5p]  (%F.%M:%L) - %m%n
    log4j.appender.debug.filter.F1=org.apache.log4j.varia.LevelRangeFilter
    log4j.appender.debug.filter.F1.LevelMin=debug
    log4j.appender.debug.filter.F1.LevelMax=debug
    
    log4j.appender.info=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.info.File=./log/rest/rest_info
    log4j.appender.info.DatePattern='.'yyyyMMdd'.log'
    log4j.appender.info.layout=org.apache.log4j.PatternLayout 
    log4j.appender.info.layout.ConversionPattern=%d [%-5p]  (%F.%M:%L) - %m%n
    log4j.appender.info.filter.F1=org.apache.log4j.varia.LevelRangeFilter
    log4j.appender.info.filter.F1.LevelMin=info
    log4j.appender.info.filter.F1.LevelMax=info
    
    log4j.appender.warn=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.warn.File=./log/rest/rest_warn
    log4j.appender.warn.DatePattern='.'yyyyMMdd'.log'
    log4j.appender.warn.layout=org.apache.log4j.PatternLayout 
    log4j.appender.warn.layout.ConversionPattern=%d [%-5p]  (%F.%M:%L) - %m%n
    log4j.appender.warn.filter.F1=org.apache.log4j.varia.LevelRangeFilter
    log4j.appender.warn.filter.F1.LevelMin=warn
    log4j.appender.warn.filter.F1.LevelMax=warn
    
    log4j.appender.error=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.error.File=./log/rest/rest_error
    log4j.appender.error.DatePattern='.'yyyyMMdd'.log'
    log4j.appender.error.layout=org.apache.log4j.PatternLayout 
    log4j.appender.error.layout.ConversionPattern=%d [%-5p]  (%F.%M:%L) - %m%n
    log4j.appender.error.filter.F1=org.apache.log4j.varia.LevelRangeFilter
    log4j.appender.error.filter.F1.LevelMin=error
    log4j.appender.error.filter.F1.LevelMax=error
    
    log4j.appender.fatal=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.fatal.File=./log/rest/rest_fatal
    log4j.appender.fatal.DatePattern='.'yyyyMMdd'.log'
    log4j.appender.fatal.layout=org.apache.log4j.PatternLayout 
    log4j.appender.fatal.layout.ConversionPattern=%d [%-5p]  (%F.%M:%L) - %m%n
    log4j.appender.fatal.filter.F1=org.apache.log4j.varia.LevelRangeFilter
    log4j.appender.fatal.filter.F1.LevelMin=fatal
    log4j.appender.fatal.filter.F1.LevelMax=fatal
    
    #log4j.logger.com.dc.oauth.server=debug
    
    #----------------------------------------------------Ibaits----------------------------------------------------
    #log4j.logger.com.ibatis=debug
    #log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=debug
    #log4j.logger.com.ibatis.common.jdbc.ScriptRunner=debug
    #log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=debug
    #log4j.logger.java.sql.Connection=debug
    #log4j.logger.java.sql.Statement=debug
    
    #log4j.logger.java.sql.PreparedStatement=debug,stdout
    #log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    #log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    #log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
    
    #log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    #log4j.appender.stdout.Target=System.out
    #log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    #log4j.appender.stdout.layout.ConversionPattern=%d{ISO8601}[%-5p][%c][%t]:%m%n

    web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5"
        xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
        http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
        <!--
        <welcome-file-list>
            <welcom-file>index.jsp</welcom-file>
        </welcome-file-list>
        -->
        <servlet>
            <servlet-name>restServlet</servlet-name>
            <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
            <init-param>
                <param-name>jersey.config.server.provider.packages</param-name>
                <param-value>com.dc.jetty.server</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>restServlet</servlet-name>
            <url-pattern>/*</url-pattern>
        </servlet-mapping>
    </web-app>

    config.properties

    #jetty
    port=8080
    contextPath=/
    resourceBase=../web
    descriptor=../web/WEB-INF/web.xml
    maxThread=5000
    minThread=100
    
    #返回时间(单位毫秒)
    sleepTime=100

    build.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <project name="jetty" default="package" basedir=".">
        
        <path id="classpath">
            <pathelement location="."/>
            <fileset dir="${basedir}/lib">
                <include name="**/*.jar"/>
            </fileset>
        </path>
        
        <target name="clean">
            <delete dir="${basedir}/all"/>
        </target>
        
        <target name="prepare" depends="clean">
            <mkdir dir="${basedir}/all"/>
            <mkdir dir="${basedir}/all/bin"/>
            <mkdir dir="${basedir}/all/lib"/>
            <mkdir dir="${basedir}/all/web"/>
            <mkdir dir="${basedir}/all/classes"/>
            <mkdir dir="${basedir}/all/configs"/>
        </target>
        
        <target name="copy" depends="prepare">
            <copy todir="${basedir}/all/bin">
                <fileset dir="${basedir}/bin" excludes="**/.svn/**/*.*">
                    <include name="**/*"/>
                </fileset>
            </copy>
            <copy todir="${basedir}/all/lib">
                <fileset dir="${basedir}/lib" excludes="**/.svn/**/*.*">
                    <include name="**/*"/>
                </fileset>
            </copy>
            <copy todir="${basedir}/all/web">
                <fileset dir="${basedir}/web" excludes="**/.svn/**/*.*">
                    <include name="**/*"/>
                </fileset>
            </copy>
            <copy todir="${basedir}/all/configs">
                        <fileset dir="${basedir}/configs" excludes="**/.svn/**/*.*">
                            <include name="**/*"/>
                        </fileset>
                    </copy>
        </target>
        
        <target name="compile" depends="copy">
            <javac srcdir="${basedir}/src" destdir="${basedir}/all/classes" debug="true" deprecation="off" failonerror="true" encoding="utf8" nowarn="on">
                <classpath refid="classpath"></classpath>
            </javac>
        </target>
        
        <target name="package" depends="compile">
            <jar destfile="${basedir}/all/lib/start.jar">
                <fileset dir="${basedir}/all/classes" includes="**/Start.class"/>
            </jar>
            <jar destfile="${basedir}/all/lib/jetty.jar">
                <fileset dir="${basedir}/all/classes"/>
            </jar>
            <delete dir="${basedir}/all/classes"/>
        </target>
        
    </project>

    Start.java

    package com.dc.jetty.start;
    
    import java.io.File;
    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.net.URLClassLoader;
    import java.util.ArrayList;
    import java.util.List;
    
    public class Start {
    
        private static void getJars(List<URL> urls, File cpdir)
                throws MalformedURLException {
    
            for (File f : cpdir.listFiles()) {
                if (f.isDirectory()) {
                    getJars(urls, f);
                }
                if (f.getName().endsWith(".jar")) {
                    URL url = f.toURI().toURL();
                    urls.add(url);
                }
            }
        }
    
        @SuppressWarnings("unchecked")
        public static void main(String[] args) {
            
            String classpath = System.getProperty("classpath");
            List<URL> urls = new ArrayList<URL>();
            File cpdir = new File(classpath);
            if (!cpdir.exists() || !cpdir.isDirectory()) {
                System.err.println("Please set system property "classpath" properly");
            } else {
                try {
                    getJars(urls, cpdir);
                } catch (MalformedURLException e) {
                    e.printStackTrace();
                }
            }
            URL[] urlArray = urls.toArray(new URL[0]);
            URLClassLoader cl = new URLClassLoader(urlArray);
            Thread.currentThread().setContextClassLoader(cl);
            try {
                Class clz = Class.forName("com.dc.jetty.start.StartServer", false, cl);
                Method method =  clz.getDeclaredMethod("getInstance");
                method.setAccessible(true);
                Object instance = method.invoke(clz);
                Method m = clz.getDeclaredMethod("start");
                m.invoke(instance);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (SecurityException e) {
                e.printStackTrace();
            } catch (NoSuchMethodException e) {
                e.printStackTrace();
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            }
        }
    
    }

    StartServer.java

    package com.dc.jetty.start;
    
    import org.eclipse.jetty.server.Server;
    import org.eclipse.jetty.util.thread.QueuedThreadPool;
    import org.eclipse.jetty.webapp.WebAppContext;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import com.dc.jetty.util.ConfigUtil;
    
    public class StartServer {
        
        private static StartServer instance = null;
        
        private StartServer() {
            
        }
        
        public static StartServer getInstance() {
            if (instance == null) {
                instance = new StartServer();
            }
            return instance;
        }
        
        public void start() {
            ConfigUtil.getInstance().getProperty("");
            Server server = new Server(Integer.valueOf(ConfigUtil.getInstance().getProperty("port")));
            
            WebAppContext webapp = new WebAppContext();
            webapp.setContextPath(ConfigUtil.getInstance().getProperty("contextPath"));
            webapp.setResourceBase(ConfigUtil.getInstance().getProperty("resourceBase"));
            webapp.setDescriptor(ConfigUtil.getInstance().getProperty("descriptor"));
            webapp.setParentLoaderPriority(true);
            webapp.setClassLoader(Thread.currentThread().getContextClassLoader());
            
            server.setHandler(webapp);
            QueuedThreadPool pool = new QueuedThreadPool();
            pool.setMaxThreads(Integer.valueOf(ConfigUtil.getInstance().getProperty("maxThread")));
            pool.setMinThreads(Integer.valueOf(ConfigUtil.getInstance().getProperty("minThread")));
            pool.setName("RestServer");
            server.setThreadPool(pool);
            try {
                server.start();
            } catch (Exception e) {
                e.printStackTrace();
            }
            Logger logger = LoggerFactory.getLogger(StartServer.class);
            logger.info("server starts");
            
            
        }
        
        public static void main(String[] args) {
            StartServer.getInstance().start();
        }
    
    }

    ConfigUtil.java

    package com.dc.jetty.util;
    
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.URL;
    import java.util.Properties;
    
    public class ConfigUtil {
    
        private static ConfigUtil instance = null;
        private Properties properties = null;
    
        private ConfigUtil() {
    
        }
    
        public static ConfigUtil getInstance() {
            if (instance == null) {
                instance = new ConfigUtil();
            }
            return instance;
        }
    
        public void load() {
            if (properties == null) {
                properties = new Properties();
                InputStream input = null;
                try {
                    URL url = ConfigUtil.class.getClassLoader().getResource(
                            "config.properties");
                    if (url == null) {
                        throw new FileNotFoundException(
                                "config.properties not found!");
                    }
                    input = new FileInputStream(url.getPath());
                    // input = new FileInputStream(
                    // "E:\paas\01工作库\09-代码\trunks\PaaS_NewFeatureLine\Code\OAuth\configs\oauth_conf\config.properties");
                    properties.load(input);
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    
        public void reload() {
            properties = new Properties();
            InputStream input = null;
            try {
                URL url = ConfigUtil.class.getClassLoader().getResource(
                        "config.properties");
                if (url == null) {
                    throw new FileNotFoundException("config.properties not found!");
                }
                input = new FileInputStream(url.getPath());
                properties.load(input);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        public String getProperty(String name) {
            if (properties == null) {
                load();
            }
            return properties.getProperty(name);
        }
    
        public static void main(String[] args) {
            System.out.println(ConfigUtil.getInstance().getProperty("port"));
        }
    
    }

    ServiceBeanContext.java

    package com.dc.multiwrite.util;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class ServiceBeanContext {
    
        private static final Logger log = LoggerFactory
                .getLogger(ServiceBeanContext.class);
    
        private static ServiceBeanContext context = null;
    
        private static ApplicationContext ctx = null;
    
        private ServiceBeanContext() {
    
        }
    
        public static ServiceBeanContext getInstance() {
            if (context == null) {
                synchronized (ServiceBeanContext.class) {
                    if (context == null) {
                        context = new ServiceBeanContext();
                    }
                }
            }
            return context;
        }
    
        public void loadContext(String path) {
            try {
                ctx = new ClassPathXmlApplicationContext(path);
            } catch (Exception e) {
                e.printStackTrace();
                log.error(e.getMessage(), e);
            }
        }
    
        public Object getBean(String bean) {
            return ctx.getBean(bean);
        }
    }

    DispatcherServlet.java

    package com.dc.multiwrite.servlet;
    
    import javax.servlet.ServletConfig;
    import javax.servlet.http.HttpServlet;
    
    import com.dc.multiwrite.util.ServiceBeanContext;
    
    public class DispatcherServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
    
        public void init(ServletConfig config) {
            ServiceBeanContext.getInstance().loadContext("applicationContext.xml");
        }
    }

    applicationContext.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
        xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
        xmlns:tx="http://www.springframework.org/schema/tx"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
                            http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                            http://www.springframework.org/schema/context
                            http://www.springframework.org/schema/context/spring-context-3.0.xsd
                            http://www.springframework.org/schema/aop
                            http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
                            http://www.springframework.org/schema/tx
                            http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
    
        <context:property-placeholder location="classpath*:jdbc.properties" />
    
        <!-- proxool连接池 -->
        <bean id="dataSource" class="org.logicalcobwebs.proxool.ProxoolDataSource">
            <property name="driver">
                <value>${jdbc.driverClassName}</value>
            </property>
            <property name="driverUrl">
                <value>${jdbc.url}</value>
            </property>
            <property name="user" value="${jdbc.username}" />
            <property name="password" value="${jdbc.password}" />
            <property name="alias" value="Pool_dbname" />
            <property name="maximumActiveTime" value="600000" />
            <property name="prototypeCount" value="0" />
            <property name="maximumConnectionCount" value="50" />
            <property name="minimumConnectionCount" value="2" />
            <property name="simultaneousBuildThrottle" value="50" />
            <property name="houseKeepingTestSql" value="select CURRENT_DATE" />
        </bean>
    
        <!-- mybatis 配置 -->
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <property name="dataSource" ref="dataSource" />
            <property name="configLocation" value="classpath:${jdbc.configLocation}" />
        </bean>
        
        <bean id="sqlMapClient"
            class="com.dc.multiwrite.dao.SqlMapClientTemplate">
            <property name="sqlSession" ref="sqlSession" />
        </bean>
    
        <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
            <constructor-arg index="0" ref="sqlSessionFactory" />
        </bean>
    
        <!-- 事务管理器 -->
        <bean id="transactionmanager"
            class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource" ref="dataSource"></property>
        </bean>
    
        <!-- 方法事务参数 -->
        <tx:advice id="serviceAdvice" transaction-manager="transactionmanager">
            <tx:attributes>
                <tx:method name="updateAppScalableStatus" propagation="REQUIRES_NEW"
                    isolation="READ_UNCOMMITTED" rollback-for="Exception" />
                <tx:method name="updateDefaultProtocol" propagation="REQUIRES_NEW"
                    isolation="READ_UNCOMMITTED" rollback-for="Exception" />
                <tx:method name="saveProtocol" propagation="REQUIRES_NEW"
                    isolation="READ_UNCOMMITTED" rollback-for="Exception" />
                <tx:method name="saveNewNode" propagation="REQUIRED"
                    rollback-for="Exception" />
                <tx:method name="add*" propagation="REQUIRED" rollback-for="Exception" />
                <tx:method name="run*" propagation="REQUIRED" rollback-for="Exception" />
                <tx:method name="save*" propagation="REQUIRED"
                    rollback-for="Exception" />
                <tx:method name="saveUpgrade" propagation="SUPPORTS"
                    isolation="READ_COMMITTED" rollback-for="Exception" />
                <tx:method name="update*" propagation="REQUIRED"
                    rollback-for="Exception" />
                <tx:method name="del*" propagation="REQUIRED" rollback-for="Exception" />
                <tx:method name="start*" propagation="REQUIRED"
                    rollback-for="Exception" />
                <tx:method name="stop*" propagation="REQUIRED"
                    rollback-for="Exception" />
                <tx:method name="destroy*" propagation="REQUIRED"
                    rollback-for="Exception" />
                <tx:method name="deploy*" propagation="REQUIRED" isolation="READ_COMMITTED"
                    rollback-for="Exception" />
                <tx:method name="reapply" propagation="REQUIRED" isolation="READ_COMMITTED"
                    rollback-for="Exception" />
                <tx:method name="redeploy*" propagation="REQUIRED"
                    rollback-for="Exception" />
                <tx:method name="isolate*" propagation="REQUIRED"
                    rollback-for="Exception" />
                <tx:method name="return*" propagation="REQUIRED"
                    rollback-for="Exception" />
                <tx:method name="unisolate*" propagation="REQUIRED"
                    rollback-for="Exception" />
                <tx:method name="*"/>
            </tx:attributes>
        </tx:advice>
    
        <!-- 配置切面 -->
        <aop:config proxy-target-class="true">
            <aop:pointcut id="servicePointcut"
                expression="execution(* com.dc.multiwrite.service.impl.*.*(..))" />
            <aop:advisor pointcut-ref="servicePointcut" advice-ref="serviceAdvice" />
        </aop:config>
    
        <context:component-scan
            base-package="com.dc.multiwrite.dao.impl, com.dc.multiwrite.service.impl" />
    
    </beans>

    jdbc.properties

    #oracle
    #jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
    #jdbc.url=jdbc:oracle:thin:@127.0.0.1:1521:PAAS
    #jdbc.username=PAAS
    #jdbc.password=PAAS
    #jdbc.configLocation=sql-map-oracle-config.xml
    
    #mysql
    jdbc.driverClassName=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://10.126.253.38:3306/test_guojwe?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true
    jdbc.username=root
    jdbc.password=root
    jdbc.configLocation=sql-map-mysql-config.xml

    sql-map-mysql-config.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN" "ibatis-3-config.dtd">
    
    <configuration>
        
        <settings>
            <setting name="lazyLoadingEnabled" value="false" />
            <setting name="cacheEnabled" value="true"/>
        </settings>
        
        <mappers>
            <mapper resource="db/mapping/mysql/test.xml"/>
        </mappers>
        
    </configuration>

    test.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "ibatis-3-mapper.dtd">
    <mapper namespace="test">
    
        <insert id="insert" parameterType="java.util.List">
            insert into test(id, count)
            values
            <foreach collection="list" item="item" index="index" separator=",">
                (#{item.id}, #{item.count})
            </foreach>
        </insert>
        
        <update id="update" parameterType="java.util.List">
            <foreach collection="list" item="item" index="index" separator="">
                update test
                <set>
                    count = #{item.count}
                </set>
                where id = #{item.id};
            </foreach>
        </update>
        
        <delete id="delete" parameterType="java.util.List">
            delete from test
            where id in
            <foreach collection="list" item="item" index="index" separator="," open ="(" close=")">
                #{item.id}
            </foreach>
        </delete>
        
    </mapper>

    ExecutorServicePool.java

    package com.dc.multiwrite.util;
    
    import java.util.concurrent.Callable;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import java.util.concurrent.Future;
    import java.util.concurrent.ThreadFactory;
    
    public class ExecutorServicePool {
        
        private static ExecutorServicePool pool;
    
        private transient ExecutorService services;
        
        private ExecutorServicePool(){
            int size = Integer.parseInt(ConfigUtil.getInstance().getProperty("multiwrite.threadPoolSize"));
            services = Executors.newFixedThreadPool( size, new ThreadFactory() {
                private static final String name = "multiwrite-thread";
                public Thread newThread(Runnable r) {
                    return new Thread(r, name);
                }
            });
        }
        
        public static ExecutorServicePool getInstance(){
            if( pool == null ){
                synchronized( ExecutorServicePool.class ){
                    if( pool == null ){
                        pool = new ExecutorServicePool();
                    }
                }
            }
            return pool;
        }
    
    
        public ExecutorService getServices() {
            return services;
        }
        
        public <T> Future<T> submit( Callable<T> task ){
            return services.submit( task );
        }
        
        public Future<?> submit( Runnable task ){
            return services.submit( task );
        }
        
        public void execute( Runnable command ){
            services.execute( command );
        }
    }
  • 相关阅读:
    函数
    python操作文件
    POJ-2689-Prime Distance(素数区间筛法)
    POJ-2891-Strange Way to Express Integers(线性同余方程组)
    POJ-2142-The Balance
    POJ-1061-青蛙的约会(扩展欧几里得)
    Educational Codeforces Round 75 (Rated for Div. 2) D. Salary Changing
    Educational Codeforces Round 75 (Rated for Div. 2) C. Minimize The Integer
    Educational Codeforces Round 75 (Rated for Div. 2) B. Binary Palindromes
    Educational Codeforces Round 75 (Rated for Div. 2) A. Broken Keyboard
  • 原文地址:https://www.cnblogs.com/sayaoailun/p/4923911.html
Copyright © 2011-2022 走看看