线程池简单用法

高并发多线程插入数据写法示例

使用方法

1
2
3
4
5
6
7
8
9
10
11
12

private ExecutorService executorService = Executors.new FixedThreadPool(10);
private ThreadPoolExecutor executor = (ThreadPoolExecutor)executorService;
// 使用队列插入数据,后面如果改造成批处理之类的也好执行
private LinkedBlockingDeque<DataModel> queue = new LinkedBlockingDeque<DataModel>();

private void insertRecord(DataModel dataModel){
queue.add(queryModel);
InsertRecordThread task = new InsertRecordThread(jjgExamQuesLoadDao, queue);
executor.execute(task);
}
// 这里不用executor.shutdown(),关闭线程池 , 因为线程池一直开着,没有就不会启用,用就可以直接执行, 不要将线程池关闭。

线程执行类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class  InsertRecordThread  implements  Runnable{

private JjgExamQuesLoadDao jjgExamQuesLoadDao;

private LinkedBlockingDeque<DataModel> queue;

public InsertRecordThread(JjgExamQuesLoadDao jjg , LinkedBlockingDeque<DataModel> queue){
this.jjgExamQuesLoadDao = jjg;
this.queue = queue;
}

public void run(){
try{
DataModel event = queue.poll();
jjgExamQuesLoadDao.insertAnswerRecord(event);
}catch(Exception e){
e.printStackTrace();
}

}

}
  • 到此项目结束, 之前因为不太会用多线程,总感觉会出现问题,不敢用,其实用多了,考虑周全也没什么问题, 而且效率还会大大提升。