zoukankan      html  css  js  c++  java
  • Java 实现缓存,一个线程存,一个线程取

    缓存类:

    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类,没有效果

  • 相关阅读:
    K8S 内部服务调用域名解析超时
    云原生服务网格istio 第二章
    云原生服务网格istio 第一章
    kubernetes权威指南 第4版 第十章节读书笔记
    Navicat Premium基本使用
    Mac安装SecureCRT
    zabbix监控ssl证书到期时间
    nginx 配置proxy_pass URL末尾加与不加/(斜线)的区别
    PyCharm 项目删除
    Pycharm问题:module 'pip' has no attribute 'main'
  • 原文地址:https://www.cnblogs.com/Donnnnnn/p/9774673.html
Copyright © 2011-2022 走看看