Java多线程简单实例
2017-06-05 11:28
363 查看
最近为了提高批处理程序的统计效率,将程序改为多线程执行,由原来的单一线程计算改为五个线程同时计算,大大缩短了统计时间。实现原理很简单,就是将需要计算的内容分成五份交给五个线程进行统计,五个线程相互之间没有影响。
程序
这里没有涉及到线程的同步、阻塞等等,所以很容易实现。我是通过实现Runnable接口来实现多线程的,相对继承Thread类有以下几个优点:
1):适合多个相同的程序代码的线程去处理同一个资源
2):可以避免java中的单继承的限制
3):增加程序的健壮性,代码可以被多个线程共享,代码和数据独立。
程序
public class GenerateMonitorCompanyAndPersonRisk implements Runnable{ private List<SysAccount> accountList; public GenerateMonitorCompanyAndPersonRisk(List<SysAccount> accountList) { this.accountList = accountList; } @Override public void run() { MonitorCompanyService monitorCompanyService = new MonitorCompanyService(); MonitorCompanyRiskAnalysisService monitorCompanyRiskAnalysisService = new MonitorCompanyRiskAnalysisService(); MonitorRelationCompanyRiskAnalysisService monitorRelationCompanyRiskAnalysisService = new MonitorRelationCompanyRiskAnalysisService(); MonitorRelationPersonRiskAnalysisService monitorRelationPersonRiskAnalysisService = new MonitorRelationPersonRiskAnalysisService(); MonitorRelationCompanyService monitorRelationCompanyService = new MonitorRelationCompanyService(); MonitorRiskReportService monitorRiskReportService = new MonitorRiskReportService(); MonitorRelationPersonService monitorRelationPersonService = new MonitorRelationPersonService(); MonitorUserEventLevelCompanyNumTrendService monitorUserEventLevelCompanyNumTrendService = new MonitorUserEventLevelCompanyNumTrendService(); String accountId = ""; for(SysAccount account : accountList){ accountId = account.getAccountId(); //生成监控企业风险分析 monitorCompanyRiskAnalysisService.generateMonitorCompanyRiskAnalysis(accountId); //生成关系企业风险分析 monitorRelationCompanyRiskAnalysisService.generateMonitorRelationCompanyRiskAnalysis(accountId); //生成关系个人风险分析 monitorRelationPersonRiskAnalysisService.generateMonitorRelationPersonRiskAnalysis(accountId); //更新关系企业风险信息 monitorRelationCompanyService.updateMonitorRelationCompanyRisk(accountId); //更新关系自然人风险信息 monitorRelationPersonService.updateMonitorRelationPersonRisk(accountId); //更新动态监控企业风险信息 monitorCompanyService.updateMonitorCompanyRisk(accountId); //生成用户动态监控各事件类型企业数量趋势 monitorUserEventLevelCompanyNumTrendService.generateMonitorUserEventLevelCompanyNumTrend(accountId); //统计动态监控风险报告 monitorRiskReportService.generateMonitorRiskReport(accountId); } } public static void main(String[] args) { SysAccountService sysAccountService = new SysAccountService(); MonitorCompanyEventService monitorCompanyEventService = new MonitorCompanyEventService(); MonitorPersonEventService monitorPersonEventService = new MonitorPersonEventService(); //获取企业和个人的风险事件 monitorCompanyEventService.getTodayCompanyEvent(); monitorPersonEventService.getTodayPersonEvent(); //获取所有有效的账号 List<SysAccount> accountList = sysAccountService.queryEffectiveSysAccount(); //分五个线程统计风险信息 int num = accountList.size() / 4; List<SysAccount> accountList1 = accountList.subList(0, num*1); List<SysAccount> accountList2 = accountList.subList(num*1, num*2); List<SysAccount> accountList3 = accountList.subList(num*2, num*3); List<SysAccount> accountList4 = accountList.subList(num*3, num*4); List<SysAccount> accountList5 = accountList.subList(num*4, accountList.size()); GenerateMonitorCompanyAndPersonRisk generator1 = new GenerateMonitorCompanyAndPersonRisk(accountList1); GenerateMonitorCompanyAndPersonRisk generator2 = new GenerateMonitorCompanyAndPersonRisk(accountList2); GenerateMonitorCompanyAndPersonRisk generator3 = new GenerateMonitorCompanyAndPersonRisk(accountList3); GenerateMonitorCompanyAndPersonRisk generator4 = new GenerateMonitorCompanyAndPersonRisk(accountList4); GenerateMonitorCompanyAndPersonRisk generator5 = new GenerateMonitorCompanyAndPersonRisk(accountList5); Thread thread1 = new Thread(generator1); Thread thread2 = new Thread(generator2); Thread thread3 = new Thread(generator3); Thread thread4 = new Thread(generator4); Thread thread5 = new Thread(generator5); thread1.start(); thread2.start(); thread3.start(); thread4.start(); thread5.start(); } }
这里没有涉及到线程的同步、阻塞等等,所以很容易实现。我是通过实现Runnable接口来实现多线程的,相对继承Thread类有以下几个优点:
1):适合多个相同的程序代码的线程去处理同一个资源
2):可以避免java中的单继承的限制
3):增加程序的健壮性,代码可以被多个线程共享,代码和数据独立。
相关文章推荐
- Java 多线程 简单实例 (Runnable)
- JAVA 几种多线程的简单实例 Thread Runnable
- Java 多线程 简单实例 (消费者与生成者)的关系
- Java 多线程ServerSocket通讯简单实例(基于TCP协议)
- java简单实现多线程及线程池实例详解
- java 基础教程之多线程详解及简单实例
- Java实例开发05-01 简单的多线程服务器
- java多线程结合单例模式实例,简单实用易理解
- JAVA 几种多线程的简单实例 Thread Runnable
- java多线程---Thread和Runnable简单实例
- java多线程的简单实现及线程池实例
- java 多线程 join 方法简单实例。
- Java Tread多线程(0)一个简单的多线程实例
- Java 多线程 简单实例 (Thread)
- Java实例开发05-01 简单的多线程服务器
- java图像界面开发简单实例-JOptionPane应用
- java 一个简单的servlet实例
- java.util.Timer类简单实例
- java图像界面开发简单实例-Graphics2D、Rectangle2D、Ellipse2D、Line2D的简单应用
- java图像界面开发简单实例-JPanel应用