java多线程处理业务

public class Test {


private static int count = 0;
public static ApplicationContext ac = new ClassPathXmlApplicationContext("spring.xml");
static {
PropertyConfigurator.configure("config/log4j.prop");
}


public static void main(String[] args) {
//启动队列线程
MessageTask task= MessageTask.getInstance();
new Thread(task).start();

//启动测试线程
sendThread runnable = new Test().new sendThread();
ScheduledExecutorService service =  Executors.newScheduledThreadPool(1);
service.scheduleAtFixedRate(runnable, 0, 3, TimeUnit.MILLISECONDS);

}

private class sendThread implements Runnable{
@Override
public void run() {
count++;
Message message = new Message();
message.setMobile(String.valueOf(count));
message.setContent("这不是数据");
MessageTask.addMessage(message);
}
}

}


public class MessageTask implements Runnable {
private static final BlockingQueue<Message> queue = new LinkedBlockingQueue<Message>();
private static final MessageTask instance = new MessageTask();

private MessageTask() {
}

public static MessageTask getInstance() {
if (instance != null) {
new MessageTask();
}
return instance;
}

@Override
public void run() {
Map<String, innerThread> map = new HashMap<String, innerThread>();
for (int i = 0; i < 10; i++) {
innerThread runnable = new innerThread();
Thread thread = new Thread(runnable);
thread.setName("线程" + i);
thread.start();
map.put(i + "", runnable);
}

while (true) {
Message message = queue.poll();
if (message == null) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {


}
continue;
}
String key = StringUtil.getLastChar(message.getMobile());
innerThread runnable = map.get(key);
runnable.addMessage(message);
}

}

public static void addMessage(Message message) {
queue.add(message);
System.out.println("队列大小:" + queue.size());
}

// 内部类,处理线程
private class innerThread implements Runnable {
private LinkedList<Message> list = new LinkedList<Message>();

public void addMessage(Message message) {
list.addLast(message);
}

public void run() {
while (true) {
Message message = list.poll();
if (message == null) {
try {
System.out.println(Thread.currentThread().getName() + ":队列无数据");
Thread.sleep(500);
} catch (InterruptedException e) {
}
continue;
}
double l = (Math.PI + Math.E);
String threadName = Thread.currentThread().getName();
System.out.println(threadName + ":" + message.getMobile() + "," + message.getContent());
}

}
}

说明:队列线程启动后,同时开启十个处理线程,通过取末将数据投递到对应线程中去处理.队列线程中涉及添加和取出,所有用LinkedBlockingQueue,处理线程则独有自己的集合,所以用linkedList,

练手程序,请勿轻信

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值