开辟多线程

@Configuration
public class LogConsumerThreadConfig {
    private final LogConsumerThread logConsumerThread;
    public LogConsumerThreadConfig(LogConsumerThread logConsumerThread){
        this.logConsumerThread = logConsumerThread;

        new Thread(logConsumerThread,"logThread-1").start();
        new Thread(logConsumerThread,"logThread-2").start();
        new Thread(logConsumerThread,"logThread-3").start();
        new Thread(logConsumerThread,"logThread-4").start();
        new Thread(logConsumerThread,"logThread-5").start();

    }

}

@Component
public class logQueue {
    private Queue logQueue = new ArrayBlockingQueue(100000);
    public Object pollImQueue(){
        return imQueue.poll();
    }
    public void addQueue(RetransmitBodyDTO imDataHubDTO){
        imQueue.add(imDataHubDTO);
    }
}

//多线程读取队列数据,发到datahub

@Component
public class LogConsumerThread implements Runnable{
    private final Logger log = LoggerFactory.getLogger(LogConsumerThread.class);

    private final LogQueue logQueue;
    private LogProducer logProducer = null;
    private final DataCombinationSeiviceImpl dataCombinationSeivice;
    public final MTCAliyunMnsProperties mtcAliyunMnsProperties;

    public LogConsumerThread(LogQueue logQueue, MTCAliyunMnsProperties mtcAliyunMnsProperties, @Value("${spring.application.name}") String appName, DataCombinationSeiviceImpl dataCombinationSeivice){
        this.logQueue = logQueue;
        this.mtcAliyunMnsProperties = mtcAliyunMnsProperties;
        this.dataCombinationSeivice = dataCombinationSeivice;
        logProducer = new LogProducer(mtcAliyunMnsProperties.getAccessKeyId(),mtcAliyunMnsProperties.getAccessKeySecret(),mtcAliyunMnsProperties.getEndPoint(),mtcAliyunMnsProperties.getQueuePrefix(),appName);

    }

    @Override
    public void run() {
        while (true){
            try {
                Message message = (Message) logQueue.pollLogQueue();
                if (null == message) {
                    Thread.sleep(4000L);
                } else {
//                    this.logProducer.saveLog(message);
                    //先转换格式再把队列发过来的消息读出来save到datahub
                    com.esenyun.mns.dto.Message msg = JsonUtil.stringToObject(message.getMessageBody(),Message.class);
                    dataCombinationSeivice.save(msg);

                }
            }catch (Exception e){
		如果线程被Object.wait, Thread.join和Thread.sleep三种方法之一阻塞,那么,它将接收到一个中断异常(InterruptedException),从而提早地终结被阻塞状态,调用interrupt()方法可以使线程退出wait join sleep方法!
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e1) {
                    e1.printStackTrace();
		
			Thread.currentThread().interrupt();
} } } }}

猜你喜欢

转载自blog.csdn.net/qq_39438729/article/details/79717046
今日推荐