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

  • 相关阅读:
    ASP.NET性能优化篇(转载)
    Apache相关
    UVa11292 The Dragon of Loowater
    POJ2653 Pickup sticks
    POJ2155 Matrix
    POJ3009 Curling 2.0
    POJ1066 Treasure Hunt
    UVa11729 Commando War
    Ubuntu下解决压缩文件的文件名乱码问题
    HDU3415 Max Sum of MaxKsubsequence
  • 原文地址:https://www.cnblogs.com/Donnnnnn/p/9774673.html
Copyright © 2020-2023  润新知