volatile/CAS/atomicInteger/BlockQueue/線程交互/原子引用

import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger;java

class MyResource{ private volatile boolean FLAG = true;//默認開啓,進行生產+消費 private AtomicInteger atomicInteger = new AtomicInteger();this

BlockingQueue<string> blockingQueue = null;
public MyResource(BlockingQueue<string> blockingQueue) {
    this.blockingQueue = blockingQueue;
    System.out.println(blockingQueue.getClass().getName());
}

public void myProd() throws Exception{
    String data = null;
    boolean retValue;
    while(FLAG){
        data = atomicInteger.incrementAndGet()+"";
        retValue = blockingQueue.offer(data,2L, TimeUnit.SECONDS);
        if(retValue){
            System.out.println(Thread.currentThread().getName()+"\t插入隊列"+data+"成功");
        }else{
            System.out.println(Thread.currentThread().getName()+"\t插入隊列"+data+"失敗");
        }
        TimeUnit.SECONDS.sleep(1);
    }
    System.out.println(Thread.currentThread().getName()+"\t生產中止");
}

public void myConsumer() throws Exception{
    String result = null;
    while(FLAG){
        result = blockingQueue.poll(2L,TimeUnit.SECONDS);
        if(null==result || result.equalsIgnoreCase("")){
            FLAG = false;
            System.out.println(Thread.currentThread().getName()+"\t 超過2秒,消費退出");
            System.out.println();
            System.out.println();
            return;
        }
        System.out.println(Thread.currentThread().getName()+"\t消費隊列"+result+"成功");
    }
}

public void stop() throws Exception{
    this.FLAG = false;
}

}atom

/*線程

  • volatile/CAS/atomicInteger/BlockQueue/線程交互/原子引用
  • */

public class ProdConsumer_BlockQueueDemo { public static void main(String[] args) throws Exception{ MyResource myResource = new MyResource(new ArrayBlockingQueue<>(10));code

new Thread(()-&gt;{
        System.out.println(Thread.currentThread().getName()+"\t 生產線程啓動");
        System.out.println();
        System.out.println();
        try{
            myResource.myProd();
        }catch (Exception e){
            e.printStackTrace();
        }
    },"Prod").start();

    new Thread(()-&gt;{
        System.out.println(Thread.currentThread().getName()+"\t 消費線程啓動");
        try{
            myResource.myConsumer();
        }catch (Exception e){
            e.printStackTrace();
        }
    },"Consumer").start();

    try{TimeUnit.SECONDS.sleep(5);}catch (InterruptedException e){e.printStackTrace();}

    System.out.println();
    System.out.println();
    System.out.println();

    System.out.println("5秒鐘到,main中止");
    myResource.stop();
}

} </string></string>隊列

相關文章
相關標籤/搜索