- 博客(18)
- 资源 (9)
- 收藏
- 关注
原创 Mongo集群Java连接时MongoException$Network、UnknownHostException错误
今天在 Java 连接 Mongo 集群时报了一个超时的错误,但是在本地客户端连接单节点的时候却能连上,具体报的错误如下:Caused by: com.mongodb.MongoTimeoutException: Timed out after 60000 ms while waiting for a server that matches {serverSelectors=[ReadP...
2018-03-29 22:59:05 1783
原创 修改Linux系统时间EDT改为CST
今天发现一台服务器时间比北京时间慢 12 个小时,使用 date 命令后发现是:root@ubuntu# dateThu Mar 22 5:12:08 EDT 2018EDT 时间即美国东部时间。这里要改为北京时间即可: 命令如下:root@ubuntu# mv /etc/localtime /etc/localtime.bak root@ubuntu# ln -s /usr/share/z
2018-03-22 17:53:23 12972 1
原创 Java并发Concurrent包——ThreadPoolExecutor线程池源码分析
ThreadPoolExecutor 就是常用的线程池,下面通过其中重要的源码来分析:线程池的状态由下边的源码,可以得知,线程池由一个32位的 int 型来表示状态。其中高位的 3 位代表 5 种状态,低位的 29 位代表工作线程的数量。 private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0)); pr
2018-03-11 18:21:32 289
原创 Java并发Concurrent包——Callable/Future/FutureTask解析
Runnable 接口,由于是 void 方法,是没有返回结果的,在并发包中,有 Callable 类,能够得到执行的结果。Callable返回结果并且可能抛出异常的任务。实现者定义了一个不带任何参数的叫做 call 的方法。 Callable 接口类似于 Runnable,两者都是为那些其实例可能被另一个线程执行的类设计的。但是 Runnable 不会返回结果,并且无法抛出经过检查的异常。pub
2018-03-10 15:21:19 1075
原创 Java并发Concurrent包——ArrayBlockingQueue源码分析
ArrayBlockingQueue 是一个由数组支持的有界阻塞队列。此队列按 FIFO(先进先出)原则对元素进行排序。 BlockingQueue 接口实现的都是阻塞队列。而 ConcurrentLinkedQueue 是基于 CAS 和链表实现的无阻塞高性能队列。 ConcurrentLinkedQueue 的源码分析见 Java并发Concurrent包——ConcurrentLinked
2018-03-09 17:02:32 387
原创 Java并发Concurrent包——ConcurrentLinkedQueue源码分析
ConcurrentLinkedQueue 是并发中的高性能队列,而 BlockingQueue 接口下的是并发的阻塞队列。 ConcurrentLinkedQueue 是一个基于链接节点的无界线程安全队列。此队列按照 FIFO(先进先出)原则对元素进行排序。队列的头部 是队列中时间最长的元素。队列的尾部 是队列中时间最短的元素。新的元素插入到队列的尾部,队列获取操作从队列头部获得元素。当多个线程
2018-03-09 16:00:04 272
原创 Java并发Concurrent包——CopyOnWriteArrayList源码分析
CopyOnWriteArrayList 和 ArrayList 比较相似,只不过 CopyOnWriteArrayList 是线程安全的。 当进行写操作时,将原来的数组复制一份新的数组,写操作在这个新数组上进行;此时不影响旧数组上的读操作。写操作完成后,数组的引用改为新的数组即可,旧数组不再使用。属性 // 锁对象 final transient ReentrantLock loc
2018-03-09 11:03:10 215
原创 Java并发Concurrent包的锁(七)——Semaphore源码分析及使用
Semaphore 通常用于限制可以访问某些资源(物理或逻辑的)的线程数目。信号量维护了一个许可集。如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可。每个 release() 添加一个许可,从而可能释放一个正在阻塞的获取者。Sync类 abstract static class Sync extends AbstractQueuedSynchronizer {
2018-03-08 16:38:37 192
原创 Java并发Concurrent包的锁(六)——CountDownLatch源码分析及使用
CountDownLatch 和 CyclicBarrier 比较相似,都属于并发的实用工具类。 CyclicBarrier 的源码分析和使用可以参考:Java并发Concurrent包的锁(五)——CyclicBarrier源码分析及使用JDK 文档中的定义: 用给定的计数初始化 CountDownLatch。由于调用了 countDown() 方法,所以在当前计数到达零之前,await 方法
2018-03-08 13:27:51 217
原创 Java并发Concurrent包的锁(五)——CyclicBarrier源码分析及使用
CyclicBarrier 是一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用。因为该 barrier 在释放等待线程后可以重用,所以称它为循环 的 barrier。 CyclicBarrier 支持一个可选的 Runnable 命令,
2018-03-07 17:52:00 280
原创 Java并发Concurrent包——ConcurrentHashMap原理分析
ConcurrentHashMap 和 HashMap 的底层实现都是 数组+链表或红黑树 构成的。 HashMap 的源码分析见:Java集合框架——HashMap源码分析ConcurrentHashMap 相比 HashMap 支持多线程下的操作。 而与 HashTable 相比,虽然 HashTable 也是线程安全的,但是其大量使用的是 synchronized 关键字,锁的粒度比较大,
2018-03-07 15:15:40 312
原创 Java并发Concurrent包的锁(四)——读写锁源码分析
本文对读写锁源码进行了比较详细的分析。 另外可以参考可重入锁 ReentrantLock 的分析:Java并发Concurrent包的锁(三)——ReentrantLock源码分析 ReadWriteLock接口ReadWriteLock 维护了一对相关的锁,一个用于只读操作,另一个用于写入操作。只要没有 writer,读取锁可以由多个 reader 线程同时保持。写入锁是独占的。public
2018-03-06 15:22:02 417
原创 Java并发Concurrent包的锁(三)——ReentrantLock源码分析
ReentrantLock 提供了两个构造函数,默认是非公平锁的构造函数,还有一个公平锁的构造函数。 可以参考: Java并发Concurrent包的锁(二)——自旋/阻塞/可重入ReentrantLock 类中的公平和非公平,是通过对同步器 AbstractQueuedSynchronizer 的扩展加以实现的,也就是在tryAcquire的实现上做了语义的控制。 // 默认的非公平可重入
2018-03-05 16:31:08 506
原创 Java并发Concurrent包的锁(二)——自旋/阻塞/可重入
Java 并发包 Concurrent 的包结构共可分为五个部分: - 原子变量类 - 锁 - collection并发集合框架 - excutor线程池 - 同步工具本文介绍锁的一些原理和特征,比如自旋,阻塞,可重入,公平锁和非公平锁。自旋比如可以用 synchronized 关键字自己来实现一个简单的锁类 Lock,让它有一个标志 isLocked 来标记锁对象是否正在使用,
2018-03-05 14:42:47 717
原创 Java并发Concurrent包的锁(一)——Lock接口
Java 并发包 Concurrent 的包结构共可分为五个部分: - 原子类 - 锁 - collection并发集合框架 - excutor线程池 - 同步工具本文介绍 Lock 接口和其与 synchronized 关键字的对比。 Lock接口尽管 synchronized 在语法上已经足够简单了,在 JDK5 之前只能借助此实现,但是由于是独占锁,性能却不高,因此 JDK
2018-03-04 18:30:26 1321
原创 Java并发Concurrent包的原子类
concurrent 的包结构共可分为五个部分: - 原子变量类 - 锁 - collection并发集合框架 - excutor线程池 - 同步工具本文介绍原子变量类。原子变量类原子变量类位于 java.util.concurrent.atomic 包下。 以 AtomicInteger 为例,其它原子类的原理都一样: AtomicBoolean 可以用原子方式更新的 ...
2018-03-02 11:02:50 912
原创 Java中8种基本类型的封装类型——自动装箱和拆箱
8种基本类型:char、byte、short、int、long、float、double、boolean。 对应各自的封装类型。以 Integer 类为例,其他类型原理类似。 先看比较对象的 equals 方法的重写: public boolean equals(Object obj) { // 首先判断两个对象是不是同一类的对象 if (obj insta
2018-03-01 15:31:57 2381 1
原创 Java中的StringBuilder和StringBuffer
StringBuilder 和 StringBuffer 都是可变的字符序列。它们都继承于AbstractStringBuilder,实现了CharSequence接口。 但是,StringBuilder 是非线程安全的,而 StringBuffer 是线程安全的。 从源码上看,二者的方法几乎一样,而 StringBuffer 在每个方法前都加上了 synchronized 关键字,来保证同步
2018-03-01 13:21:56 136
Spring定时任务@Scheduled例子
2018-07-01
android带百分比进度条的文件上传,使用AsyncTask异步上传
2013-08-19
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人