自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(58)
  • 收藏
  • 关注

ZooKeeper示例 分布式锁

[转载请注明作者和原文链接,  如有谬误, 欢迎在评论中指正. ]  场景描述在分布式应用, 往往存在多个进程提供同一服务. 这些进程有可能在相同的机器上, 也有可能分布在不同的机器上. 如果这些进程共享了一些资源, 可能就需要分布式锁来锁定对这些资源的访问.本文将介绍如何利用zookeeper实现分布式锁.思路进程需要访问共享数据时, 就在"/locks"节点下创建一个...

2013-05-19 00:46:08 210

ZooKeeper示例 实时更新server列表

[转载请注明作者和原文链接,  如有谬误, 欢迎在评论中指正. ] 通过之前的3篇博文, 讲述了ZooKeeper的基础知识点. 可以看出, ZooKeeper提供的核心功能是非常简单, 且易于学习的. 可能会给人留下ZooKeeper并不强大的印象, 事实并非如此, 基于ZooKeeper的核心功能, 我们可以扩展出很多非常有意思的应用. 接下来的几篇博文, 将陆续介绍ZooKeeper...

2013-05-18 18:24:38 232

ZooKeeper Java API

[转载请注明作者和原文链接,  如有谬误, 欢迎在评论中指正. ] ZooKeeper提供了Java和C的binding. 本文关注Java相关的API.准备工作拷贝ZooKeeper安装目录下的zookeeper.x.x.x.jar文件到项目的classpath路径下.创建连接和回调接口首先需要创建ZooKeeper对象, 后续的一切操作都是基于该对象进行的.Zoo...

2013-05-18 01:37:49 1620

ZooKeeper 数据模型

[转载请注明作者和原文链接,  如有谬误, 欢迎在评论中指正. ] ZooKeeper的数据结构, 与普通的文件系统极为类似. 见下图:图片引用自developerworks图中的每个节点称为一个znode. 每个znode由3部分组成:stat. 此为状态信息, 描述该znode的版本, 权限等信息.data. 与该znode关联的数据.children. 该z...

2013-05-17 23:46:05 269

Zookeeper 安装和配置

[转载请注明作者和原文链接,  如有谬误, 欢迎在评论中指正. ] Zookeeper的安装和配置十分简单, 既可以配置成单机模式, 也可以配置成集群模式. 下面将分别进行介绍.单机模式点击这里下载zookeeper的安装包之后, 解压到合适目录. 进入zookeeper目录下的conf子目录, 创建zoo.cfg:tickTime=2000 dataDir=/Users...

2013-05-17 16:03:26 714

使用golang统计代码行数

有关golang的介绍请参考我的另一篇博文.  本文通过递归遍历src目录, 统计代码行数. 涉及到的知识点有:1. 目录遍历.2. 读取文件.3. 使用channel进行goroutine间的通信.4. 使用sync包进行传统的共享内存方式的同步.5. 错误处理.6. defer语句的使用.  在程序中有详细的注释: // a simple...

2012-09-09 14:28:09 2120

开启golang之旅

假如你对golang感兴趣, 却尚未开始入门, 这篇文章就是为你准备的.  为什么要学习golang?游说开发者尝试golang的文章很多. 比如golang主要设计者的演讲, 某个德国人的吐槽, 国内golang布道者所著书籍的前言. 我不想重复一遍大牛们的观点, 只想说一说自己朴素的感受.在学习golang之前, 我是java的爱好者, 犹如iteye的大多数用户一样. 是...

2012-09-09 04:03:15 108

在go中使用"泛型"

[2012-05-21 翻译自这里, 对原文有所扩展, 也有所删减. 版权属于原作者, 转载必须保留此声明.]在进入泛型的话题之前, 首先实现对int slice(可以看做int数组)的冒泡排序:func BubbleSort(array []int) { for i := 0; i < len(array); i++ { for j := ...

2012-05-21 13:31:12 211

go是函数式编程语言吗?

[2012-05-19 翻译自这里, 对原文有所扩展, 也有所删减. 版权属于原作者, 转载必须保留此声明.]go是函数式编程语言吗?不是, 当然不是.那么, go提供函数吗?是的, 当然, 大多数编程语言都提供函数, go也不例外. func SayHello() { fmt.Println("Hello")}go使用关键字f...

2012-05-19 21:09:50 461

NIO中缓冲区的API介绍

[转载请注明作者和出处,  如有谬误, 欢迎在评论中指正. ]在java NIO中, 通道是IO传输发生时数据通过的入口, 而缓冲区是数据的来源或目标. Buffer是java NIO中定义的所有缓冲区类的基类. Buffer的属性1. 容量(capacity)缓冲区能够容纳的数据元素的最大数量, capacity在创建缓冲区时指定, 之后无法改变.2. 上界(limi...

2012-04-24 16:59:08 119

状态依赖的类--JCIP C14.1读书笔记

[本文是我对Java Concurrency In Practice C14.1的归纳和总结.  转载请注明作者和出处,  如有谬误, 欢迎在评论中指正. ] java类库中包含许多状态依赖的类: 其中的某些方法只有满足特定的前置条件才能继续, 比如BlockingQueue的take方法, 只有队列不为空时take方法才能返回.状态依赖的操作一般如下:void blockingA...

2012-04-11 10:24:02 138

内置锁和显式锁的区别--JCIP C13读书笔记

[本文是我对Java Concurrency In Practice C13的归纳和总结.  转载请注明作者和出处,  如有谬误, 欢迎在评论中指正. ]任何java对象都可以用作同步的锁, 为了便于区分, 将其称为内置锁.JDK5.0引入了显式锁: Lock及其子类(如ReentrantLock, ReadWriteLock等). 内置锁和显式锁的区别有: 1. 可中断申...

2012-04-11 10:17:21 224

改善并发程序的可扩展性--JCIP C11读书笔记

[本文是我对Java Concurrency In Practice C11的归纳和总结.  转载请注明作者和出处,  如有谬误, 欢迎在评论中指正. ] 可扩展性和Amdahl's law--阿姆达尔定律Scalability describes the ability to improve throughput or capacity when additional resourc...

2012-04-10 14:40:17 101

如何避免死锁--JCIPC10读书笔记

[本文是我对Java Concurrency In Practice C10的归纳和总结.  转载请注明作者和出处,  如有谬误, 欢迎在评论中指正. ]如果多个线程以不同的顺序持有多个锁, 可能发生死锁: public class AccountTrans { public void transferMoney(Account fromAccount, Account toA...

2012-04-10 10:08:37 89

task与execution--JCIPC08读书笔记

[本文是我对Java Concurrency In Practice C08的归纳和总结.  转载请注明作者和出处,  如有谬误, 欢迎在评论中指正. ]task和线程池执行机制之间隐式的耦合前面曾提到过, 线程池的应用解耦了task的提交和执行. 事实上, 这有所夸大, 因为不是所有的task都适用于所有的执行机制, 某些task要求在特定的线程池中执行:1. 非独立task, 指的...

2012-04-09 10:34:39 151

配置ThreadPoolExecutor

[本文是我对Java Concurrency In Practice C08的归纳和总结.  转载请注明作者和出处,  如有谬误, 欢迎在评论中指正. ]Executors的静态方法newCachedThreadPool, newFixedThreadPool, newScheduledThreadPool所返回的线程池都是ThreadPoolExecutor对象或者其子类对象. Thread...

2012-04-09 10:34:27 134

停止基于线程的Service--JCIP7.2读书笔记

[本文是我对Java Concurrency In Practice 7.2的归纳和总结.  转载请注明作者和出处,  如有谬误, 欢迎在评论中指正. ]以ExecutorService为例, 该类内部封装有多个线程, 类外部无法直接停止这些线程. 相反, 外部调用Service的shutDown和shutDownNow方法关闭Service, 而Service负责停止其拥有的线程.大多数...

2012-04-06 10:28:45 92

处理不可中断的阻塞-JCIP7.1读书笔记

[本文是我对Java Concurrency In Practice 7.1的归纳和总结.  转载请注明作者和出处,  如有谬误, 欢迎在评论中指正. ]并不是所有的阻塞都是可中断的, 比如InputStream.read方法. 在检测到输入数据可用, 到达流末尾或者抛出异常前, 该方法一直阻塞. 而且阻塞的时候不会检查中断标记, 所以中断线程无法使read从阻塞状态返回. 但是关闭流可以使得...

2012-04-06 10:23:43 252

处理InterruptedException异常--JCIP7.1读书笔记

[本文是我对Java Concurrency In Practice 7.1的归纳和总结.  转载请注明作者和出处,  如有谬误, 欢迎在评论中指正. ] 在java的中断机制中, InterruptedException异常占据重要的位置. 处理InterruptedException异常的方式有: 1. 不catch直接向上层抛出, 或者catch住做一些清理工作之后重抛该异常...

2012-04-05 14:08:13 202

中断线程--JCIP7.1读书笔记

[本文是我对Java Concurrency In Practice 7.1的归纳和总结.  转载请注明作者和出处,  如有谬误, 欢迎在评论中指正. ]启动线程之后, 大多数时候我们等待线程运行完成后自动结束. 但是有时我们希望可以提前终止线程的运行:1. 用户申请取消时. 比如用户点击了取消按钮.2. 时间限制的任务. 有些任务具有时间限制, 如果在一定的时间内仍然没有得到想要的结...

2012-04-05 14:03:25 96

改善并发性能--JCIP6.3读书笔记

[本文是我对Java Concurrency In Practice 6.3的归纳和总结.  转载请注明作者和出处,  如有谬误, 欢迎在评论中指正. ]浏览器的页面渲染模块负责HTML标记的处理, 本文以页面渲染为例探讨线程与并发. 为了简化问题, 我们假设只包含文本标记和图片标记. 单线程渲染使用单线程处理是最简单的方式: 从头至尾扫描HTML文件, 如果遇到文本标记...

2012-04-02 11:51:01 65

Executor--JCIP C06读书笔记

[本文是我对Java Concurrency In Practice 6.1/6.2的归纳和总结.  转载请注明作者和出处,  如有谬误, 欢迎在评论中指正. ] 为什么需要使用线程池? one-thread-per-request可能带来的问题:1. 线程的创建和销毁会占用一定的资源. 如果请求频繁而对请求的处理是轻量级的(大多的web请求符合该情形), 创建一个线程处理请求后将其销...

2012-04-02 09:28:23 71

设计高效的线程安全的缓存--JCIP5.6读书笔记

[本文是我对Java Concurrency In Practice 5.6的归纳和总结.  转载请注明作者和出处,  如有谬误, 欢迎在评论中指正. ] 几乎每一个应用都会使用到缓存, 但是设计高效的线程安全的缓存并不简单. 如:public interface Computable<A, V> { V compute(A arg) throws Interrup...

2012-04-01 22:49:31 94

synchronizer--JCIP5.5读书笔记

[本文是我对Java Concurrency In Practice 5.5的归纳和总结.  转载请注明作者和出处,  如有谬误, 欢迎在评论中指正. ] Synchronizerssynchronizer是指那些根据状态协调线程的对象. BlockingQueue就是一个典型的synchronizer: 当队列为空时, 取数据的消费者线程将被阻塞, 直到队列不为空; 当队列满时, 存入数...

2012-04-01 22:44:05 64

使用BlockingQueue构建生产者消费者模式--JCIP5.3读书笔记

[本文是我对Java Concurrency In Practice 5.3的归纳和总结.  转载请注明作者和出处,  如有谬误, 欢迎在评论中指正. ] 生产者消费者模式以缓冲区作为生产者和消费者之间沟通的桥梁: 生产者只负责生产, 将生产出来的数据存入缓冲区. 而消费者只负责消费, 不断的从缓冲区中取出数据进行处理.生产者消费者模式是非常常用的, 因为应用该模式有效的解耦了生产者和...

2012-03-31 17:32:40 91

ConcurrentHashMap和CopyOnWriteArrayList--Java Concurrency In Practice C05读书笔记

[本文是我对Java Concurrency In Practice 5.2的归纳和总结.  转载请注明作者和出处,  如有谬误, 欢迎在评论中指正. ]ConcurrentHashMap类我们可以使用Collections.synchronizedMap()方法包装HashMap得到线程安全的Map, 但是如前所述, 这样会带来很大的性能损失. JDK5之后我们有了新的选择--Concu...

2012-03-31 11:27:17 75

表达式求值的java实现

[例子和习题出自数据结构(严蔚敏版), 本人使用java进行实现.  转载请注明作者和出处,  如有谬误, 欢迎在评论中指正. ]对整数表达式求值. 表达式中可能包含+-*/四则运算, 以及括号, 比如:4 + 2 * 3 - 10 / 5, (1+2) * (4 + 5) - (9 / 7)等.思路: 将括号之间的内容当做子表达式求值, 得出子表达式的结果后就可以去掉括号了.使用op...

2012-03-29 16:12:20 595

栈的java实现和栈的应用举例

[例子和习题出自数据结构(严蔚敏版), 本人使用java进行实现.  转载请注明作者和出处,  如有谬误, 欢迎在评论中指正. ]栈的实现栈是一种先进后出的数据结构, 首先定义了栈需要实现的接口:public interface MyStack<T> { /** * 判断栈是否为空 */ boolean isEmpty(); /** * 清空栈...

2012-03-29 11:27:20 193 1

线程安全的集合类--Java Concurrency In Practice C05读书笔记

[本文是我对Java Concurrency In Practice 5.1的归纳和总结.  转载请注明作者和出处,  如有谬误, 欢迎在评论中指正. ]synchronized集合java集合框架提供了多种synchronized集合, 比如Vector, HashTable, Collections的synchronizedXxx方法的返回值等.synchronized集合是线...

2012-03-28 18:26:48 131

利用对象限制和委托构建线程安全的类--Java Concurrency In Practice C04读书笔记

[本文是我对Java Concurrency In Practice第三章的归纳和总结.  转载请注明作者和出处,  如有谬误, 欢迎在评论中指正. ] 设计线程安全的类需要考虑:1. 确定组成对象状态的变量.2. 确定约束对象状态的不变式.3. 建立并发访问对象状态的规则. 后置条件: 由于某些变量的取值是有限制范围的, 改变状态变量之后需要检查改变后的状态是否合法. 后...

2012-03-27 18:23:57 90

变量可见性和volatile, this逃逸, 不可变对象, 以及安全公开--Java Concurrency In Practice C03读书笔记...

[本文是我对Java Concurrency In Practice第三章的归纳和总结, 也有部分语句摘自周志明所著的"深入理解java虚拟机".  转载请注明作者和出处,  如有谬误, 欢迎在评论中指正. ] 线程安全包含2个方面: 原子性和可见性, java的同步机制都是围绕这2个方面来确保线程安全的. 可见性理解可见性首先要清楚为什么多线程环境下会有可见性问题. 现代CP...

2012-03-26 21:55:22 144

Race condition--Java Concurrency In Practice C02读书笔记

[本文是我对Java Concurrency In Practice第二章的归纳和总结,  转载请注明作者和出处,  如有谬误, 欢迎在评论中指正. ] 多线程环境下,无需调用方进行任何同步处理也能保证正确性的类是线程安全的类 无状态的对象是线程安全的。无状态是指没有成员变量。由于方法的局部变量都是在线程私有的栈中分配的,因此在一个线程中调用无状态对象的方法,不会影响到其他线程。...

2012-03-26 10:17:30 197

HashMap的源码解读

最近看到几篇精彩的文章:存取之美 —— HashMap原理、源码、实践Hash碰撞与拒绝服务攻击这些文章让我收获良多, 但是有些地方说的不够详细, 在此写下本人对上述文章的总结和理解, 希望可以给需要的朋友带来一些帮助.1. 概述HashMap在底层采用数组+链表的形式存储键值对.在HashMap中定义了一个内部类Entry<K, V>, 该内部类是对key...

2012-03-09 20:23:08 92

使用Builder模式创建对象

[coolxing按: 转载请注明作者和出处, 如有谬误, 欢迎在评论中指正.]创建对象的方法很多, 常见的有构造函数, 静态工厂方法, 工厂方法等. 以上三种方法不适合创建需要提供多个参数的对象, 而其中某些参数是可选的场景.考虑一个Person类:public class Person { // 必须的参数 private int id; private Str...

2012-03-08 17:57:10 242

原创 实现严谨的singleton类

[coolxing按: 转载请注明作者和出处, 如有谬误, 欢迎在评论中指正.] singleton模式是大多数javaer耳熟能详的, 不过要做到真正的单例其实很不容易, 你需要考虑以下问题:1. 延迟加载时多线程环境下是否能保证单例?2. 是否可以通过暴力反射获得新的对象?3. 是否可以通过clone方法获得新的对象?4. 是否可以通过序列化获得新的对象? 对于...

2012-03-08 16:41:42 83

java clone

[coolxing按: 转载请注明作者和出处, 如有谬误, 欢迎在评论中指正.] clone用在什么场合下1. 创建一个新的对象需要很复杂的步骤(例如类的继承层次很深), 而刚好有一个适合的对象用来clone,这时使用clone技术有助于性能优化;2. 用在原型(prototype)模式下. shallow copy和deep copy两者本质上的区别在于, 采用s...

2011-12-04 23:27:48 70

android笔记--处理started service的多次启动请求

[coolxing按: 转载请注明作者和出处, 如有谬误, 欢迎在评论中指正.]  所谓的started service, 是我对以startService()方法启动的service的叫法. Service运行在所在进程的main thread中. 启动一个service时, 不会自动为该service创建新的thread. 这意味着开发者通常需要为service开启新的线程, 以执行耗...

2011-11-30 03:10:39 251

android笔记--task和back stack

[本文的图片来源于google SDK文档] 基本概念task是一系列activity的集合, 这些activity通常因为同一目的而启动, 系统将这些activity按照创建的顺序组织在栈中(也就是所谓的backstack). 每一个task都拥有一个仅属于它的back stack.例如一个联系人app, 当新建一个联系人时, 需要为这个联系人指定头像.这时会启动图片浏览...

2011-11-28 00:49:36 115

android笔记--保存和恢复activity的状态数据

[coolxing按: 转载请注明作者和出处, 如有谬误, 欢迎在评论中指正.]一般来说, 调用onPause()和onStop()方法后的activity实例仍然存在于内存中, activity的所有信息和状态数据不会消失, 当activity重新回到前台之后, 所有的改变都会得到保留. 但是当系统内存不足时, 调用onPause()和onStop()方法后的activity可能会被...

2011-11-27 20:11:25 288

android笔记--android的进程与线程

[这篇文章是我对dev Guide中Processes and Threads的翻译和总结, 也加上了一些个人理解] android中的进程默认情况下, 同一个application中的所有component运行在同一个linux进程下. 启动一个component A时, 如果已存在处于运行状态中的component B, 且A和B属于同一个application, 那么compon...

2011-11-27 02:41:10 163

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除