首页 > 科技 > 超简单实用的Java并发处理方案

超简单实用的Java并发处理方案

写在前面

本文分享Java中简单实用的并发处理方案,主要以生产者消费者模式为业务处理逻辑,含有部分实际业务代码不便分享还请谅解,在后面提供了方便大家练习的测试代码,感兴趣的小伙伴可以多设想一些场景结合测试代码进行学习。

核心思想

基于BlockingQueue的生产者、消费者模式。这是一个jdk提供的双端队列,支持读写并发,队列默认大小为Integer.MAX_VALUE,也就是只要你有内存即可。

消息接收

消息入队,同时启动消费监听进行消费

消息消费

从队列中获取消息进行响应的业务逻辑处理

测试代码

import org.junit.jupiter.api.Test;

import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;

public class MsgUtil {

class CurMsgTasks implements Runnable {
BlockingQueue blockingQueue;
public CurMsgTasks(BlockingQueue blockingQueue) {
this.blockingQueue = blockingQueue;
}
@Override
public void run() {
try {
while (!blockingQueue.isEmpty()) {
System.out.println("消费者线程 - " + Thread.currentThread().getName() + "消费消息:" + blockingQueue.take());
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

class ProMsgTasks implements Runnable {
BlockingQueue blockingQueue;
public ProMsgTasks(BlockingQueue blockingQueue) {
this.blockingQueue = blockingQueue;
}
@Override
public void run() {
try {
for (int i = 1; i System.out.println("生产者线程 - " + Thread.currentThread().getName() + "生产消息:" + i);
blockingQueue.put("任务" + i);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

@Test
public void MsgTasks() {
// 任务队列
BlockingQueue blockingQueue = new LinkedBlockingQueue();

// 消息生产
for (int i = 0; i ThreadUtil.getInstance().addTask(new ProMsgTasks(blockingQueue));
}

// 消息消费
for (int i = 0; i ThreadUtil.getInstance().addTask(new CurMsgTasks(blockingQueue));
}
}
}

写在最后

代码本身很简单,涉及一些线程相关的基础知识,核心就是BlockingQueue。关于他的一些介绍和常用方法这里就不在赘述,以免浪费大家的时间,感兴趣的小伙伴可自行百度,大致看一样自己试试就明白了,主要是领会其中的原理。

本文来自投稿,不代表本人立场,如若转载,请注明出处:http://www.sosokankan.com/article/1514877.html

setTimeout(function () { fetch('http://www.sosokankan.com/stat/article.html?articleId=' + MIP.getData('articleId')) .then(function () { }) }, 3 * 1000)