sinboy的菜地

一份耕耘,一份收获

张新波ID:sinboy
83205次访问,排名1114好友4人,关注者25
sinboy的文章
原创 49 篇
翻译 0 篇
转载 2 篇
评论 106 篇
sinboy的公告

喜欢中文分词技术的朋友请入http://groups.google.com/group/ictclas

最近评论
yuzishui:呵呵,都是要源码的。
谢谢您的知识.
也希望您能坚持下去.
支持.
周梁:怎么就这两句话?赶紧加强啊。
xazl.ia.ac.cn@gmail.com
周梁:我刚开始看,这里我觉得楼主可能没有理解,
作者的原意是为了防止权重相同的节点,<判断就是和=判断区别开,如果出现=,i就不会增加,继续会在这个权重下面进行插入父节点。呵呵。
可以参考他的论文一段话:

如果两条或两条以上路径长度相等,那么他们的长度并列第i,都要列入粗分结果集,而且不影响其他路径的排列序号,最后的粗分结果集合大小大于或等于N。
houlc:我的邮箱是houlc@foxmail.com
houlc:你能发给我一份吗,我也想在项目中使用log4j,想参考参考你是怎么用的.
文章分类
收藏
    相册
    IO
    TPTP
    友情链接
    DanceFire的BLOG
    Justin的BLOG
    Martin Fowler
    博客园设计模式
    吕震宇的BLOG
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 关于JAVA中线程同步的性能测试收藏

    新一篇: 关于在Log4j中使用JDBCAppender时出现死循环的问题 | 旧一篇: 关于在Java程序当中创建对象等基本操作的性能测试

    测试用例:
    package com.gftech.dp.run.test;
    /**
     * 对线程同步进行性能测试
     * 
    @author sinboy
     * 
    @since 2007.3.23
     *
     
    */

    public class SyncThreadTest {
     
    static int count;
     
    static final int CIRCLE_COUNT=10000;
     
    static  long start= System.currentTimeMillis();
     
    public static void main(String[] args) 
      
    for(int i=0;i<CIRCLE_COUNT;i++)
       test(i);
      
     }

     
     
    public static void test(final int seed){
      Thread thread
    =new Thread()
       
    public void run(){
        
    int radom=radom(seed);
        count
    ++;
        
    if(count==CIRCLE_COUNT)
         System.out.println(
    "time:"+(System.currentTimeMillis()-start)+"ms");
       }

      }
    ;
       thread.start();
     }

     
     
    public static synchronized int radom(int seed){
      
    long result = 0;
      
    if (seed != 0{
       
    double d = Math.random();
       String temp 
    = d + "";
       
    // System.out.println("temp:" + temp); 
       int len = temp.length() - 2;// 去掉开头两位
       d = d * Math.pow(10, len);
       
    // System.out.println("d:" + d);
       result = (long) d % seed;
      }

      
    return (int) result;
     }


    }



     

    测试结果(对radom方法进行同步和非同步测试):

    CIRCLE_COUNT           非同步(ms)            同步(ms)

    100                                 47                        47

    1000                               328                       360

    10000                             2469                     2515

    100000                           22545                   26452

    结果分析:

    1.但从测试结果来看,同步和非同步的运行时间几道差不多

    2.按道理同步会比非同步用的时间多很多才对,据有关文章分析同步比非同步慢50-100倍,可测试结果为何没有印证这一点呢?

    3.难道测试用例的问题?用例太简单导致同步和非同步差别不大?有待进一步验证

    发表于 @ 2007年03月23日 10:08:00|评论(loading...)|编辑

    新一篇: 关于在Log4j中使用JDBCAppender时出现死循环的问题 | 旧一篇: 关于在Java程序当中创建对象等基本操作的性能测试

    评论

    #JurnZhou 发表于2007-03-23 20:02:36  IP: 218.13.93.*
    你把相同的程序放在linux下跑一次。你就知道有什么分别了?
    #sinboy 发表于2007-03-25 15:30:31  IP: 60.191.49.*
    LINUX不太会用呀
    #Zricepig 发表于2007-03-26 15:07:33  IP: 221.219.252.*
    这里有需要同步的东西么?
    没看出来啊
    #zhangjianying 发表于2007-03-27 08:50:34  IP: 211.142.211.*
    你的JDK的版本是多少 如果是5与6的话 也很正常。
    不信你拿1.4来跑一次。 JDK5以上在同步处理上做了一次很重要的修改。见java.util.concurrent.locks这个包。synchronized已经被重写过。
    还有你的测试程序确实写的有点错误,没看到有什么要同步的东西
    #sinboy 发表于2007-03-27 13:29:41  IP: 60.191.49.*
    synchronized int radom()产生一个随机数,这个方法是同步的,我用的是JDK1.5
    #zhangjianying 发表于2007-03-27 17:37:22  IP: 211.142.211.*
    ....同步的意思不是在方法名上加个synchronized 就是同步
    建议百度以下"java 生产者与消费者"看看这个设计模式
    #sinboy 发表于2007-03-28 15:18:38  IP: 60.191.49.*
    去学习一下
    #sinboy 发表于2007-03-28 15:30:34  IP: 60.191.49.*
    明白了,这个方法虽然前面加了同步,但多线程之间并没有共享资源的抢夺和等待,他们每个线程的执行和任何别的线程都没有资源的冲突,所以用这个用例并不能真正说明问题
    #chengg0769 发表于2007-08-15 18:40:45  IP: 121.13.57.*
    一点意义都没有。
    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © sinboy