- 浏览: 73289 次
- 性别:
- 来自: 安徽
最新评论
-
shaojie92:
是每一次new的时候都会执行判断是否向RememberSet增 ...
JVM 之 OopMap 和 RememberedSet -
biyelei:
...
JVM 新生代为何需要两个 Survivor 空间? -
173806613:
Epoll模型详解 http://t.cn/RaWYhJE
【转】我读过最好的 Epoll 模型讲解 -
天在摔个:
请教下 OopMap是每个线程都有一份吗 还是说整个新生代有一 ...
JVM 之 OopMap 和 RememberedSet -
tianqiaaqq:
【转】Redis 集群之路由
文章列表
原文地址:http://gnucto.blog.51cto.com/3391516/998509
Redis 与 Memcached 的区别
传统 MySQL + Memcached 架构遇到的问题
实际上 MySQL 是适合进行海量数据存储的,通过 Memcached 将热点数据加载到 cache ,加速访问,很多公司都曾经使用过这 ...
首先我们来定义流的概念,一个流可以是文件, socket , pipe 等等可以进行 I/O 操作的内核对象。
不管是文件,还是套接字,还是管道,我们都可以把他们看作流。
之后我们来讨论 I/O 的操作。通过 read ,我们可以从流中读入数 ...
以下示例来自网络。
package com.wjxie.test.forkjoin;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.Future;
import java.util.concurrent.RecursiveTask;
/**
* 并行计算 1 到 n 之和。
*
* Created by ...
Service 层:
1. 通过缓存(orderID)判断是否正在发券,若正在发直接返回
2. 发券主流程(Biz 层)
3. 发送微信/QQ/短信通知
4. 发 swallow 消息(非结算)
5. Cat 打点统计
Biz 层:
1. DPBiz
-- 普通发券
-- 第三方发券
-- 导码单发券
-- 实物单发券
2. MTBiz
DPBiz 通用逻辑:
1. 插入 SerialNumber-ReceiptID 映射表,生成 ReceiptID 以备后用
2. 插入 TG_Receipt_New: insertWithID
3. 异步插入 JournalVoucher ...
之前的券池分成两个部分,一个 Job 和 一个 Service 。
Job 会每分钟 loop 券首位(1-9),生成一批券码往数据库里面插,这里需要做一些过滤:老券池、新券池、内存券池和券表 。
Service 里面有9个内存券池。它会在外部请求发券时定位到某个券池,看它的券够不够,够的话直接返回,否则重新去数据库捞一批进来。捞进来之后把数据库的券码删掉。
数据库有一个额外的“捞取批次表”,主要用来做幂等(防止分布式环境下捞取相同的券):
1. 生成批次 ID
INSERT INTO TG_ReceiptDistributePoolBatchFetch ..
SELEC ...
基于注解 + 反射 + 动态代理
先上代码:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface InvokerMethod {
enum HttpMethod {
Get, Post
}
HttpMethod method() default HttpMethod.Get;
String path() default "";
int timeout() default 5 ...
本文源自他人设计,作者戴神看到请包涵~~
JPA ?两段式提交? No !我们要的是简单、自由!框架的核心代码如类图。
注意:
如果失败策略为默认即抛出异常,则会被 TransactionManager 捕获并触发 rollback() 然后执行一系列的 undo() ;如果失败策略为重试,则异常将被 RetryFailStrategy 自己消化掉,到不了 TransactionManager 这里。
如何使用:
XXBiz
@Autowired
private TransactionManager transactionManager;
@A ...
1. 程序顺序规则:
func() {
int a = 1;
int b = a;
}
b 一定能看到 a 的变化
2. 监视器锁规则:
synchronized(obj) {
do something
}
线程 A 申请锁,而在这之前的一纳秒,线程 B 正好释放了 obj 上的锁,那么 A 一定能觉察到 B 的释放
3. volatile 变量规则:
volatile a;
线程对 a 的写入一定能被后面的其它线程看到,这里的后面是指时间上的后面
4. 中断规则:
t.interrupt();
假如我调用这句话,那么 t 一定能觉察到自己中断状态的变化(catch 住 Int ...
CountDownLatch
场景:用10个线程分治计算1到 n 之和
构造函数: CountDownLatch(int count)
方法: await/countDown
Semaphore
场景:实现一个有界的、可阻塞的、线程安全的 Set
构造函数: Semaphore(int permits)
方法: acquire/release
CyclicBarrier
场景:可重复使用的 CountDownLatch
构造函数: CyclicBarrier(int parties, Runnable barrierAction)
方法: await
说明: await 阻止当前线程运行下去 ...
package com.wjxie.linked.blocking.queue;
public class Producer extends Thread {
public Producer(String name) {
super(name);
}
@Override
public void run() {
while (true) {
System.out.println("Producer queue size: " + Main.queue.size ...
生产者消费者之 wait / notify
- 博客分类:
- 多线程
package com.wjxie.wait.notify;
public class Producer extends Thread {
public Producer(String name) {
super(name);
}
@Override
public void run() {
while (true) {
synchronized (Main.queue) {
try {
Thread.s ...
原文地址 http://www.douban.com/group/topic/30286342
Sphinx 的 SetGeoAnchor方法,(LinkWith:http://sphinxsearch.com/docs/manual-0.9.9.html#api-func-setgeoanchor)
coreseek提供的中文翻译手册:
function SetGeoAnchor ( $attrlat, $attrlong, $lat, $long )
为地表距离计算设置锚点,并且允许使用它们。$attrlat 和$attrlong 是字符串,分别指定了对应经度和纬度的属性名称。$lat 和 ...
package com.wjxie.test;
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void yuesefu(int n, int m, int k) {
List<Integer> list = new ArrayList<Integer>();
for (int i = 1; i <= n; i++) {
list.add(i);
}
while (list.size( ...
<context:annotation-config />
Spring 容器默认禁止注解装配。所以,在使用基于注解的自动装配前,我们需要在 Spring 配置中启用它。最简单的启用方式是使用 Spring 的 context 命名空间配置中的 <context:annotation-config /> 元素。<con ...
package com.jianfeitech.utils;
import java.util.Set;
import org.apache.log4j.Logger;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import com.jianfeitech.constants.AdConstants;
/**
*
* Redis 工具类。
*
* @a ...