Java队列之LinkedTransferQueue

165 阅读2分钟
原文链接: click.aliyun.com

Java队列之LinkedTransferQueue

天飞 2017-12-21 17:30:51 浏览38 评论0

java 线程 random string Consumer class void demo thread LinkedTransferQueue

摘要: 如何应用合适的队列,这就是经验了。 如何在队列里容纳多个线程,及多个线程处理同一个队列?

每个知识点都尽量涉及到,

但每种队列应用的场景都不一样的,

如何应用合适的队列,这就是经验了。

如何在队列里容纳多个线程,及多个线程处理同一个队列?

应该算是JAVA里比较深入的思考了。

7e94468e74a20b6f764ef683b99407d82d91e8b5

producer


package demo.thread;

import java.util.Random;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TransferQueue;

public class Producer implements Runnable {
	private final TransferQueue<String> queue;
	public Producer(TransferQueue<String> queue) {
		this.queue = queue;
	}
	
	private String produce() {
		return "Your lucky number " + (new Random().nextInt(100));
	}
	@Override
	public void run() {
		// TODO Auto-generated method stub
		try {
			while (true) {
				if (queue.hasWaitingConsumer()) {
					queue.transfer(produce());
				}
				TimeUnit.SECONDS.sleep(1);
			}
		} catch (InterruptedException e){
			
		}
		
	}

}


consumer


package demo.thread;

import java.util.concurrent.TransferQueue;

public class Consumer implements Runnable{
	private final TransferQueue<String> queue;
	public Consumer(TransferQueue<String> queue) {
		this.queue = queue;
	}
	@Override
	public void run() {
		// TODO Auto-generated method stub
		try {
			System.out.println("Consumer " + Thread.currentThread().getName() + queue.take());
			
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		
	}

}


main


package demo.thread;

import java.util.concurrent.LinkedTransferQueue;
import java.util.concurrent.TransferQueue;

public class ThreadMain {
	public static void main(String[] args) {
		TransferQueue<String> queue = new LinkedTransferQueue<String>();
		Thread producer = new Thread(new Producer(queue));
		producer.setDaemon(true);
		producer.start();
		
		for (int i = 0; i < 10; i++) {
			Thread consumer = new Thread(new Consumer(queue));
			consumer.setDaemon(true);
			consumer.start();
			try {
				Thread.sleep(1000L);
			} catch(InterruptedException e) {
				e.printStackTrace();
			}
		}
		
		
	}

}


output


Consumer Thread-1Your lucky number 33
Consumer Thread-2Your lucky number 51
Consumer Thread-3Your lucky number 8
Consumer Thread-4Your lucky number 35
Consumer Thread-5Your lucky number 29
Consumer Thread-6Your lucky number 8
Consumer Thread-7Your lucky number 46
Consumer Thread-8Your lucky number 20
Consumer Thread-9Your lucky number 15
Consumer Thread-10Your lucky number 67



本文为云栖社区原创内容,未经允许不得转载,如需转载请发送邮件至yqeditor@list.alibaba-inc.com;如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:yqgroup@service.aliyun.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。

用云栖社区APP,舒服~

【云栖快讯】中办国办印发《推进互联网协议第六版(IPv6)规模部署行动计划》加快推进基于 IPv6 的下一代互联网规模部署,计划指出2025年末中国 IPv6 规模要达到世界第一,阿里云也第一时间宣布了将全面提供IPv6服务,那么在全面部署 IPV6 前,你需要了解都在这儿  详情请点击 评论文章 (0) (0) (0)

相关文章

网友评论