实战Memcached缓存系统(6)Memcached CAS的多线程程序实例

来源:未知 责任编辑:智问网络 发表时间:2013-09-22 21:30 点击:
1. 源程序
[java]
package com.sinosuperman.memcached; 
 
import java.io.IOException; 
import java.net.InetSocketAddress; 
 
import net.spy.memcached.CASResponse; 
import net.spy.memcached.CASValue; 
import net.spy.memcached.MemcachedClient; 
 
 
public class Test { 
     
    private static MemcachedClient client = null; 
     
    static { 
        try { 
            client = new MemcachedClient(new InetSocketAddress("localhost", 11211)); 
        } catch (IOException o) { 
        } 
    } 
 
    public static void main(String[] args) throws Exception { 
         
        client.set("numberss", 1800, 1); 
         
        Test testObj = new Test(); 
        for (int i = 0; i < 10; i++) { 
            testObj.new ThreadTest("Thread-" + (i + 1)).start(); 
        } 
    } 
     
    private class ThreadTest extends Thread { 
         
        private  MemcachedClient client = null; 
        ThreadTest(String name) throws IOException { 
            super(name); 
            client = new MemcachedClient(new InetSocketAddress("localhost", 11211)); 
        } 
         
        public void run() { 
            int i = 0; 
            int success = 0; 
            while (i < 10) { 
                i++; 
                CASValue<Object> uniqueValue =client.gets("numberss"); 
                CASResponse response = client.cas("numberss",    
                 uniqueValue.getCas(), (Integer)uniqueValue.getValue() + 1); 
 
                if (response.toString().equals("OK")) { 
                    success++; 
                } 
                 
                if (i == 10) 
                System.out.println(Thread.currentThread().getName() + " " +  i  
                  + " time " + " update oldValue : " + uniqueValue.getValue()  
                  +  " , result : " + response); 
            } 
             
            if (success < 10) { 
                Count.incr(10 - success); 
                System.out.println("Test counter: " + Count.get());  
            } 
        } 
    } 
     
    public static class Count { 
        private static int counter = 0; 
        public static void incr(int x) { 
            counter += x; 
        } 
        public static int get() { 
            return counter; 
        } 
    } 

 
2. 输出结果:
[plain]
Thread-1 10 time  update oldValue : 14 , result : EXISTS 
Test counter: 6 
Thread-2 10 time  update oldValue : 14 , result : EXISTS 
Test counter: 15 
Thread-3 10 time  update oldValue : 17 , result : EXISTS 
Test counter: 22 
Thread-5 10 time  update oldValue : 17 , result : EXISTS 
Test counter: 27 
Thread-4 10 time  update oldValue : 20 , result : OK 
Test counter: 33 
Thread-8 10 time  update oldValue : 27 , result : OK 
Test counter: 36 
Thread-6 10 time  update oldValue : 28 , result : EXISTS 
Test counter: 43 
Thread-10 10 time  update oldValue : 31 , result : EXISTS 
Test counter: 52 
Thread-9 10 time  update oldValue : 31 , result : OK 
Test counter: 60 
Thread-7 10 time  update oldValue : 35 , result : OK 
Test counter: 65 
 
3. 分析
我们可以看到,未成功的次数最终为65,数据值最终为35,两者的和刚好是100,正好符合我们的实验结果预期
    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    用户名: 验证码:点击我更换图片
    最新评论 更多>>

    推荐热点

    • Request.ServerVariables 参数大全
    • 执行全文索引时出现权限不足的解决方法
    • 导入excel文件处理流程节点的解决方案
    • 查看sql修改痕迹(SQL Change Tracking on Table)
    • MongoDB安装为Windows服务方法与注意事项
    • App数据层设计及云存储使用指南
    • PostgreSQL启动过程中的那些事三:加载GUC参数
    • 写给MongoDB开发者的50条建议Tip1
    • Percolator与分布式事务思考(二)
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
    Copyright © 2008-2015 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1