Mehr lesen
通常我们在java项目中使用线程时不会单独地去开一个线程,如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,于是java提供了ThreadPoolExecutor这个类来让我们可以快速创建一个线程池,有了线程池上述问题都可以得到解决。偶尔机会发现这个类的实现不是很复杂,但是却设计得很优雅,于是拿出来分析一下源码。
公司的项目用到了rocketMQ,看到里面有段这样的代码,生产者生产消息
1234567
private static final ObjectMapper OM = new ObjectMapper();...Message message = new Message(this.topic, "create", uid.toString(), OM.writeValueAsBytes(uid));message.setWaitStoreMsgOK(true);SendResult sendResult = producer.send(message, new SelectMessageQueueByHash(), uid);...
在PHP中,集合是很简单的,就一个Array,既可以做数组,又可以做map,对比JAVA常用的List,Map,Set来说只有Set是在PHP中需要封装的,本文就Java中常用的几个集合类来做一个总结。
Spring是一个致力于降低Java开发复杂性的框架,其中最重要的部分就是依赖注入和切面编程。本文主要讲解Spring的bean和它的装配即依赖注入的基本知识和用法。
电商系统通常会有秒杀这种业务场景,例如:一件商品在0点开启秒杀,库存只有5件,某程序员这样来实现:
ZooKeeper是一个开源的分布式协调服务,其设计目标是将原本复杂容易出错的分布式一致性服务封装,构成一个高效可靠简单易用的接口供用户使用。
说起杀死进程第一想到的绝对是kill这个命令,看一下man page的介绍
The kill utility sends a signal to the processes specified by the pid operand(s).
tail命令是最常用来看日志改变的工具,比如在执行某个任务时会往本地文件中打入日志,然后使用类似
1
tail -f file_path
12345
struct redisServer { ... redisDb *db; ...}