Java 實現緩存,一個線程存,一個線程取
阿新 • • 發佈:2018-10-11
override adt oid com read block tst ktr urn
緩存類:
package com.zit.test; import java.util.concurrent.BlockingDeque; import java.util.concurrent.LinkedBlockingDeque; public enum Cache { INSTANCE; public BlockingDeque<String> list = new LinkedBlockingDeque<String>(); public void put(String str) { try { list.put(str); } catch (InterruptedException e) { e.printStackTrace(); } } public String take(){ String str = null; try { str = list.take(); } catch (InterruptedException e) { e.printStackTrace(); } return str; } public boolean isEmpty(){ return list.isEmpty(); } }
線程1:存數據
package com.zit.test; import javax.annotation.PostConstruct; import org.springframework.stereotype.Component; @Component public class TestCache1 { @PostConstruct public void method1() { new Thread(new Runnable() { @Override public voidrun() { int i = 0; while(true) { Cache.INSTANCE.put("g" + i); i++; try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } },"ThreadPut").start(); } }
線程2:取數據
package com.zit.test; import javax.annotation.PostConstruct; import org.springframework.stereotype.Component; @Component public class TestCache2 { @PostConstruct public void method2() { new Thread(new Runnable() { @Override public void run() { while(true) { if(Cache.INSTANCE.isEmpty()) { try { Thread.sleep(200); } catch (InterruptedException e) { e.printStackTrace(); } continue; } String str = Cache.INSTANCE.take(); System.out.println(str); } } },"ThreadTake").start(); } }
啟動Web工程,可見效果
奇怪的是,如果不在Web工程裏,只是運行Java類,沒有效果
Java 實現緩存,一個線程存,一個線程取