@Data
@AllArgsConstructor
public class ReleaseTask {
/**
* 用于返回前端结果的sessionID
*/
private String sessionId;
/**
* 用于返回前端结果的内容
*/
private String massage;
/**
* 发布的runable路径
*/
private Runnable runnable;
}
@Slf4j
@Service
public class RtpService {
/**
* 核心线程数
*/
private static final int CORE_POOL_SIZE = 2;
/**
* 最大线程数
*/
private static final int MAXIMUM_POOL_SIZE = 10;
/**
* 等待时间 一分钟
*/
private static final long KEEP_ALIVE_TIME = 1;
private ThreadPoolExecutor threadPoolExecutor;
@Autowired
private WebSocketServer webSocketServer;
@SuppressWarnings("unchecked")
RtpService() {
threadPoolExecutor = new ThreadPoolExecutor(CORE_POOL_SIZE, MAXIMUM_POOL_SIZE, KEEP_ALIVE_TIME, TimeUnit.MINUTES,
new ArrayBlockingQueue(10), new DefaultThreadFactory("Release Thread Pool"));
}
/**
* 线程触发
* @param task 线程的Runnable接口
* @return true为启动成功,false为启动失败
*/
public boolean execute(ReleaseTask task) {
Runnable run = () -> {
// 1. 生成任务
// 2. 发布
try {
task.getRunnable().run();
webSocketServer.sendMessageThe(task.getSessionId(),task.getMassage()+"成功");
} catch (Exception e) {
webSocketServer.sendMessageThe(task.getSessionId(),task.getMassage()+"失败");
}
// 3. 发消息
};
try {
threadPoolExecutor.execute(run);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}