NutzCN Logo
问答 nutzrunner的问题
发布于 2829天前 作者 老司机 1711 次浏览 复制 上一个帖子 下一个帖子
标签:

继承nutzrunner后,只要new MyRunner(“name”)里name一样就会线程同步,还是不管name是什么,所有new出来的MyRunner都会线程同步?

来自炫酷的 NutzCN

14 回复

线程同步指啥

@wendal synchronized(this)同步锁

来自炫酷的 NutzCN

打算用NutRunner类解决什么问题?

@wendal 记录每天某个页面的被访问次数,累加次数必须要同步锁吧

来自炫酷的 NutzCN

@wendal 就是不影响正常访问流程的情况下,开线程去记录次数

来自炫酷的 NutzCN

那NutRunner不是你想要的东西.

记录次数,不记到数据库吗?

@wendal 要求先记录到redis里面,然后每天把redis的数据放到oracle里面,说是怕频繁链接数据库影响效率,或出现表锁死啊什么的错误

来自炫酷的 NutzCN

那每天跑个定时任务就完事了

@wendal 每天定时任务是把昨天redis里的数据放到oracle里面这个我已经写好了,当天的数据据放在redis里面第二天由定时任务实现数据迁移,我问的线程,是每次用户来访问,开个带同步锁的线程,在不影响正常访问返回流程的前提下,去累加访问次数。而且我一开始就只是想知道,继承nutRunner的runner,什么时候同步,什么时候异步。能不能先把这个答案告诉我先

@wendal

                KeyWordRunner keyWordRunner =new KeyWordRunner("keyword");
                keyword = keywordReply.getKeyword();
                    keyWordRunner.setKeyword(keyword);
                    keyWordRunner.setHitFlag(Constants.KEYWORD_FLAG_HIT);
                    //异步执行数据累加,不影响正常返回,因为要累加次数,所以要求线程必须有同步锁
                    keyWordRunner.run();
                    return keyWordService.getHitResponse(keywordReply);

NutRunner没这种东西.

那个lock是用来控制唤醒和休眠的,每个实例一个,就没有什么同步/异步的东西.

一开头就说了跟你想要的不是一个东西.

合理的redis key设计,根本不会冲突

假设page都有id,例如nutzcn的topic id,设计其key为

topic:vp:aabbccddeeff:20170325

其中aabbccddeeff是id,末尾是日期,因为是按日统计.

每当访问一次,执行 jedis().incr(key)

过了0点,新的请求将使用新的key

incr是原子操作,而且非常快.

每日归档到数据库时,例如0点5分,取前一天的key对应的值,写入数据库.

@wendal 那我在NutRunner里面调用

synchronized (this) {  }

同步块呢??应该可以实现线程同步吧???

添加回复
请先登陆
回到顶部