缓存类:
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 void run() { 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类,没有效果