Java Multithreading and Concurrency Library Advanced Application--18

Advanced Application of Java Multithreading and Concurrency Library--
18_Zhang

2018-5- 5 17.10


package cn.itcast.heima2;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;


public class BlockingQueueTest {
public static void main(String[] args) {
final BlockingQueue queue = new ArrayBlockingQueue(3);
for(int i=0;i<2;i++){
new Thread(){
public void run(){
while(true){
try {
Thread.sleep((long)(Math.random()*1000));
System.out.println(Thread.currentThread().getName() + "准备放数据!");queue.put(1);System.out.println(Thread.currentThread().getName() + "已经放了数据," + "队列目前有" + queue.size() + "个数据");} catch (InterruptedException e) {e.printStackTrace();}}}











}.start();
} new Thread(){ public void run(){ while(true){ try { //Change the sleep time here to 100 and 1000 respectively, observe the running result Thread.sleep(3000); System.out.println(Thread.currentThread().getName() + "Ready to take data!"); queue.take(); System.out.println(Thread.currentThread().getName() + "Already taken data, " + "The queue currently has " + queue.size() + "data"); } catch (InterruptedException e) { e.printStackTrace(); } } } }.start(); } } Queue mutex: package cn.itcast.heima2; import java.util.Collections; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue;









































import java.util.concurrent.atomic.AtomicInteger;


public class BlockingQueueCommunication {


/**
* @param args
*/
public static void main(String[] args) {final Business business = new Business();new Thread(new Runnable() {@Overridepublic void run() {for(int i=1;i<=50;i++){business.sub(i);}}}).start();for(int i=1;i<=50;i++){business.main(i);}} static class Business {  BlockingQueue<Integer> queue1 = new ArrayBlockingQueue<Integer>(1);  BlockingQueue<Integer> queue2 = new ArrayBlockingQueue<Integer>(1);  {// 匿名构造方法
























 
 


  

// Collections.synchronizedMap(null);
  try {
  System.out.println("xxxxxdfsdsafdsa");
queue2.put(1);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
  }  public  void sub(int i){try {queue1.put(1);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}for(int j=1;j<=10;j++){System.out.println("sub thread sequece of " + j + ",loop of " + i);}try {queue2.take();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}
  

 














  }  public  void main(int i){try {queue2.put(1);} catch (InterruptedException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}for(int j=1;j<=100;j++){System.out.println("main thread sequece of " + j + ",loop of " + i);}try {queue1.take();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}  }  }}
  

 



















Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325621288&siteId=291194637