• 代码如何实现多线程


    如果看完觉得对您有帮助到,麻烦关注一下,您的关注是我继续更新的动力。谢谢!!

    声明变量
    private static ThreadLocal<Map<String, Connection>> threadLocal = new ThreadLocal<Map<String,Connection>>();
        private static final int MAX_THREAD = 10;
        private static Stack<Integer> yw_shool_ids_stack = new Stack<Integer>();

    main方法

    public static void main(String[] args) throws SQLException {
            Set<Integer> ids = DBUtil.getIds(local_conn, "select user_id from yw_all_school where is_new = 0 and has_camerer=0");//老系统且无摄像头的学校
            System.out.println("幼儿云中符合既是老系统数据又是无摄像头的园所一共有"+ids.size()+"所学校");
            logger.info("幼儿云中符合既是老系统数据又是无摄像头的园所一共有"+ids.size()+"所学校");
            initSchoolIdsStack(ids);//需要实现多线程的方法
            for(int i = 0;i<MAX_THREAD;i++){
                DataTrf t = new DataTrf();
                t.start();
            }
        }

    初始化栈

    private static void initSchoolIdsStack(Set<Integer> yw_school_ids){
            int count=0;
            if(yw_school_ids != null && yw_school_ids.size() >0){
                for (Integer yw_school_id : yw_school_ids) {
                    //判断当前园所是否缺少班级或缺少孩子或缺少老师或手机号重复数量大于20
                    int yw_school_duplicate_num = (int) yw_get_all_user_num(yw_school_id).get("yw_school_duplicate_num");//该园所重复手机号数量
                    boolean is_export = isExport(yw_school_id);//返回true为可导数据,false为不可导数据
                    if(is_export&&yw_school_duplicate_num<20&&yw_school_id!=367&&yw_school_id!=347&&yw_school_id!=975){
                        yw_shool_ids_stack.add(yw_school_id);
                        count++;
                    }
                }
                System.out.println(count);
            }
        }
    重写run方法
     @Override
        public void run(){
            Map<String, Connection> connection = getConnection();
            System.out.println(connection);
            while(yw_shool_ids_stack != null && !yw_shool_ids_stack.isEmpty()){
                int yw_school_id = yw_shool_ids_stack.pop();
                try {
                    System.out.println("当前导入学校为园所school_id= "+yw_school_id);
                    importSchoolData(yw_school_id);
     
                } catch (Exception e) {
                    logger.info("导数据时出现异常的学校school_id = "+yw_school_id);
                    e.printStackTrace();
                }
            }
            close();
     
        }
    获取数据库连接
      private static Map<String, Connection> getConnection(){
            Map<String, Connection> connectionManager = null;
            if(threadLocal != null){
                connectionManager = threadLocal.get();
                if(connectionManager == null){
                    connectionManager = new HashMap<String,Connection>();
                    connectionManager.put(Constant.LOCAL_CONN, DBUtil.getConn(Constant.JDBC_LOCAL));
                    connectionManager.put(Constant.YW_REAL_CONN, DBUtil.getYwConn());
                    connectionManager.put(Constant.BBT_MASTER_CONN, DBUtil.getConn(Constant.JDBC_LOCAL));
                    threadLocal.set(connectionManager);
                }
            }
     
            return connectionManager;
        }
    数据连接关闭
     private static void close(){
            if(threadLocal != null){
            Map<String, Connection> connectionManager = threadLocal.get();
                if(connectionManager != null){
                    Connection local_conn = connectionManager.get(Constant.LOCAL_CONN);
                    if(local_conn != null){
                        try {
                            local_conn.close();
                        } catch (SQLException e) {
                            e.printStackTrace();
                        }
                    }
                    Connection bbt_master_conn = connectionManager.get(Constant.BBT_MASTER_CONN);
                    if(bbt_master_conn != null){
                        try {
                            bbt_master_conn.close();
                        } catch (SQLException e) {
                            e.printStackTrace();
                        }
                    }
                    Connection yw_real_conn = connectionManager.get(Constant.YW_REAL_CONN);
                    if(yw_real_conn != null){
                        try {
                            yw_real_conn.close();
                        } catch (SQLException e) {
                            e.printStackTrace();
                        }
                    }
                    threadLocal.remove();;
                }
            }
        }
     
  • 相关阅读:
    第3章 Python的数据结构、函数和文件
    字符与编码
    第2章 IPython和Jupyter
    第1章 准备工作
    (转)详解Python的装饰器
    (转)Python中的split()函数
    5.5 用户定义的可调用类型
    2.6 序列的增量赋值
    Zookeeper简析
    Dubbo-服务引入源码分析
  • 原文地址:https://www.cnblogs.com/chenxqNo01/p/6372722.html
Copyright © 2020-2023  润新知