`
richard_lee
  • 浏览: 16415 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论
文章列表
最近项目中遇到一个业务场景: 将当期数据库中的表迁移到另外一个数据库中,为满足迁移效率需要进行并发数据迁移。对每一数据表可以启动不同的线程同时迁移数据。迁移完成后,同步更新对应该迁移任务的状态字段。 最先想到的是使用java中并发工具类:同步屏障CyclicBarrier。 CyclicBarrier的字面意思是可循环使用(Cyclic)的屏障(Barrier)。它要做的事情是,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续运行。 CyclicBarrier可以用于多线程计算数据,最后合并计算结果的场景。 一、通过Cycl ...
最近研究dubbo,在与spring集成的时候,eclipse启动web服务的时候发现消费者实例总是被实例化两次,spring中bean默认都是singleton,不可能实例化多个对象。dubbo管理界面显示如下: 在网上查了相关的资料发现是由于在web.xml中这段配置导致的: <servlet> <servlet-name>DispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet&l ...
看到一道关于多线程题:如何实现两个线程交替打印数字0-9? 首先我们会想到要实现交替打印,那么就要其中一个执行的时候,另外一个处于等待状态,当该线程执行完的时候,唤醒另外一个。如此执行就可实现。 我们可以通过wait和notify对线程进行状态控制,并且我们需要两个监视器分别对这两个线程的wait和notify控制。如果用synchronized的wait和notify,实现起来比较麻烦(只有wait在相同的锁和监视器上的线程,才能被唤醒),因为对于同一个锁,我们需要不同的监视器进行控制wait和notify。这种情况下,Condition可以比较好的支持. Condition:能够更加精细 ...
    我们在处理并发操作的时候经常使用锁机制,大家常用的synchronized和Lock. 1.二者使用方式有所不同:      synchronized可以在方法前或者代码块中,synchronized是java中的内置锁,由jvm控制锁的释放。      Lock使用在代码块中,加锁之后需要显示的释放,一般在finally中释放锁,主要有两种锁ReentrantLock和ReentrantReadWriteLock。 2.二者都是互斥锁,也就是一次只能有一个对象持有该锁。 3.synchronized原始采用的是CPU悲观锁机制,即线程获得的是独占锁。独占锁意味着其   他线程只能依靠阻 ...
    最近在项目中应用了ActiveMQ消息中间件,这里简单说一下应用背景和与Spring的集成。     背景:多个功能模块或者系统间需要进行消息传递时,短时间内推送的信息较多,且对目标模块或者系统处理消息时间要求不是很高的时候,可以考虑采用MQ消息中间件进行处理。而开源的ActiveMQ相比于IBM WebSphere MQ是足以胜任中小系统的解决方案。     下面介绍一下ActiveMQ 5.6.0版本在Windows下的安装及如何与Spring集成使用。 Windows下的安装: 1、下载地址:http://archive.apache.org/dist/activemq/apach ...
   最近一个同事在使用Eclipse搭建初始WEB项目环境的时候,在后台的Servlet代码上修改之后,Debug调试的时候,修改的代码始终没有生效,并且总是会走到注释的那部分程序。我过去看了一下,说肯定是你写的程序没有被重新编译 ...
   最近在几个WEB项目中都用到了Memcached,简单说一下使用该缓存方案的一些优点。其中,应用背景是有大量数据需要进行读操作,并且用户对查询信息内容的响应时间要求很高。     关于memcached,官方是这样描述的:Memcached 是 ...
最近我们的高并发平台遇到用户高峰运行时总会出现CPU占用率过高的问题,经过一段时间的排查及查阅相关的JVM资料,发现在程序中有这样一块代码引起了注意: 首先我们需要了解一下JVM的垃圾收集算法: 1、标记-清除算法 最基础的收集算法是“标记-清除”算法,顾名思义,算法分为“标记”和“清除”两个阶段:首先标记出所有要回收的对象,在标记完成之后统一回收所有被标记的对象。 缺点:一是时间问题,标记和清除两个过程效率都不高。二是空间问题,标记清除之后会产生大量不连续的内存碎片。 2、复制算法 该算法的思想是将可用内存按容量划分为大小相等的两块,每次只使用其中的一块。当这块的内存用完了,则将还存活的 ...
     最近参与实现底层高并发处理的项目,接收socket客户端的连接请求,然后调用主机服务进行通讯。系统需要满足100TPS(吞吐量(tps)=活动的用户数/响应时间)的性能要求。      通过查阅相关的文献及网上的资料,最终 ...
Global site tag (gtag.js) - Google Analytics