java多线程总结(三)

最后说一下java并发包中的集合


1、阻塞队列(ArrayBlockingQueue 和 linkedBlockingQueue

ArrayBlockingQueue实现了BlockingQueue这个接口,方法如下。

  抛出异常 特殊值 阻塞 超时
插入 add(e) offer(e) put(e) offer(e, time, unit)
移除 remove() poll() take() poll(time, unit)
检查 element() peek() 不可用 不可用
 可知采用put和take是队列满了是阻塞。下面用阻塞队列来实现队列间的通信。
		BlockingQueue<Integer> queue1 = new ArrayBlockingQueue<Integer>(1);
		BlockingQueue<Integer> queue2 = new  ArrayBlockingQueue<Integer>(1);
		
		{
			try {
				queue2.put(1);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		private Boolean flag = true;
	
		public  void ThreadSub(){
				try {
					queue1.put(1);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				for (int j = 0; j < 10; j++) {
					System.out.println("子线程"+j+"次循环");
				}
				try {
					queue2.take();
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
		}
		
		public  void mianSub() {
				try {
					queue2.put(1);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				for (int j = 0; j < 5; j++) {
					System.out.println("主线程"+j+"次循环");
				}	
				try {
					queue1.take();
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
		}
	
	

ArrayBlockingQueue 和 linkedBlockingQueue的区别:

http://blog.csdn.net/xin_jmail/article/details/26157971


你可能感兴趣的:(java,多线程)