1.模式
package com.jf.cloud.monitor.test;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class BlockingQueueTest {
// 定义一个容器
public static class Basket {
// 指定容器的大小 3
BlockingQueue<String> basket = new ArrayBlockingQueue<String>(3);
// 开始向队列中放值 如果队列满了,就会抛出异常直到队列有空位时再插入消息
public void produce(String e) throws InterruptedException {
basket.put(e);
}
// 从对列中取出数据
public String takeout() throws InterruptedException {
return basket.take();
}
// 获取队列的数量
public int getAppleNumber() {
return basket.size();
}
}
// 测试方法
public static void testBasket() {
// 建立一个装苹果的篮子
final Basket basket = new Basket();
// 定义苹果生产者
class Producer implements Runnable {
public void run() {
try {
while (true) {
// 生产苹果
int i = 0;
i++;
System.out.println("生产者准备生产苹果:"
+ System.currentTimeMillis());
basket.produce(String.valueOf(i));
System.out.println("生产者生产苹果完毕:"
+ System.currentTimeMillis());
System.out.println("生产完后有苹果:" + basket.getAppleNumber()
+ "个");
// 休眠300ms
Thread.sleep(300);
}
} catch (InterruptedException ex) {
}
}
}
// 定义苹果消费者
class Consumer implements Runnable {
public void run() {
try {
while (true) {
// 消费苹果
System.out.println("消费者准备消费苹果:"
+ System.currentTimeMillis());
basket.takeout();
System.out.println("消费者消费苹果完毕:"
+ System.currentTimeMillis());
System.out.println("消费完后有苹果:" + basket.getAppleNumber()
+ "个");
// 休眠1000ms
Thread.sleep(1000);
}
} catch (InterruptedException ex) {
}
}
}
ExecutorService service = Executors.newCachedThreadPool();
Producer producer = new Producer();
Consumer consumer = new Consumer();
service.submit(producer);
service.submit(consumer);
// 程序运行10s后,所有任务停止
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
}
service.shutdownNow();
}
public static void main(String[] args) {
BlockingQueueTest.testBasket();
}
}
用队列来考虑数据高并发;
分布式高并发解决方法(有机会会做详细专题)
a。XA协议 用于数据库
b MQ消息队列
c TTC 回滚模式