第一步
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>1.5.9.RELEASE</version>
</dependency>
第二步
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
/**
* @author 卜军
* @Date: 2020/8/19 11:00
* 创建队列 并且设置队列的大小
*/
public class BlockingQueueMessage {
public static BlockingQueue<String> queue = new LinkedBlockingQueue<>(5);
public static BlockingQueue queue1 = new ArrayBlockingQueue<>(3);
}
第三步
import com.itclj.quartz.BlockingQueueMessage;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
/**
* 同一时间只能执行1个定时任务,所以加入了异步处理注解
* @author 卜军
* @Date: 2020/8/19 11:07
*/
@Component
public class Producer {
private static AtomicInteger count = new AtomicInteger();
@Async
@Scheduled(fixedDelay = 1000)
public void producerMessage1() {
offer("张三");
}
@Async
@Scheduled(fixedDelay = 1000)
public void producerMessage2() {
offer("李四");
}
@Async
@Scheduled(fixedDelay = 1000)
public void producerMessage3() {
offer("王五");
}
private void offer(String name){
try {
String str = String.valueOf(count.incrementAndGet());
System.out.println(name + "生产消息:" + str);
BlockingQueueMessage.queue1.put(name+"---"+str);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
@Async
@Scheduled(fixedDelay = 3000)
public void consumerMessage() {
boolean isRunning = true;
while (isRunning) {
try {
String msg = (String) BlockingQueueMessage.queue1.poll(2, TimeUnit.SECONDS);
if (null != msg) {
System.out.println(msg);
System.out.println("接收到的消息:" + msg);
} else {
isRunning = false;
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
第四步
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
/**
* 启动类
* Created by o 2017/4/17.
*/
@SpringBootApplication
@EnableScheduling
@EnableAsync
public class MainApplication {
public static void main(String[] args) {
SpringApplication.run(MainApplication.class, args);
}
}