多线程在Java项目中的使用案例(笔记)
- 实现runnable接口
@Override
public Boolean addMeetingExpertIds(MeetAddExpertDto meetAddExpertDto, Long userId) {
new Thread(new Runnable() {
@Override
public void run() {
try {
if (meetAddExpertDto.getExpertIdList().size() > 0) {
List<AddMeeTempDto> addMeeTempDtoList = new ArrayList<>();
for (Long expertId : meetAddExpertDto.getExpertIdList()) {
AddMeeTempDto addMeeTempDto = new AddMeeTempDto()
.setExpertId(expertId)
.setTemplateDetail(meetAddExpertDto.getTemplate() + expertId);
addMeeTempDtoList.add(addMeeTempDto);
}
expertMeetingService.addExpertMeetingBatch(meetAddExpertDto.getMeetingId(), addMeeTempDtoList, userId);
Thread.sleep(300);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
log.info("线程结束");
}
}
}).start();
return true;
}
Lambda写法
@Override
public void test(Integer meetId) {
new Thread(() -> {
try {
for (int i = 0; i < 10; i++) {
log.info("线程" + meetId + "正在输出" + i);
if (i == 5) {
Thread.sleep(200);
log.info("线程" + meetId + "睡眠");
}
}
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
log.info("线程结束");
}
}).start();
}
- 创建线程池
@Override
public void test(Integer meetId) {
ExecutorService threadPool = Executors.newFixedThreadPool(10);
long threadpoolUseTime = System.currentTimeMillis();
threadPool.execute(new Runnable() {
@Override
public void run() {
try {
for (int i = 0; i < 10; i++) {
log.info("线程" + meetId + "正在输出" + i);
if (i == 5) {
Thread.sleep(200);
log.info("线程" + meetId + "睡眠");
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
long threadpoolUseTime1 = System.currentTimeMillis();
System.out.println("多线程用时"+(threadpoolUseTime1-threadpoolUseTime));
threadPool.shutdown();
}
Lambda写法
@Override
public void test(Integer meetId) {
ExecutorService threadPool = Executors.newFixedThreadPool(10);
long threadpoolUseTime = System.currentTimeMillis();
threadPool.execute(new Runnable() {
@Override
public void run() {
try {
for (int i = 0; i < 10; i++) {
log.info("线程" + meetId + "正在输出" + i);
if (i == 5) {
Thread.sleep(200);
log.info("线程" + meetId + "睡眠");
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
long threadpoolUseTime1 = System.currentTimeMillis();
System.out.println("多线程用时"+(threadpoolUseTime1-threadpoolUseTime));
threadPool.shutdown();
}
|