- 博客(12)
- 资源 (1)
- 收藏
- 关注
原创 实现阻塞队列
阻塞队列是Concurrent包下的类,常用的包括ArrayBlockingQueue和LinkedBlockingQueue,阻塞队列中put()和take()两个方法的实现从源码中华可以看出是用消费者-生产者模式实现的,下面就是自己实现的简单的ArrayBlockingQueue废话诗少说,直接上代码:/** * 一个简单的阻塞队列 */ class MyBlock
2016-01-26 11:50:30 951
原创 实现自己的HashMap
参考源码,实现了一个简单的HashMap。。。。。。package test;import java.util.Map;import test.MyHashMap.Entry;public class MyHashMap { private Entry[] table;//Entry数组表 static final int DEFAULT_INITIAL_
2016-01-09 15:12:22 617
原创 CountDownLatch与CyclicBarrier
CountDownLatch 直译过来就是倒计数(CountDown)门闩(Latch)。倒计数不用说,门闩的意思顾名思义就是阻止前进。在这里就是指 CountDownLatch.await() 方法在倒计数为0之前会阻塞当前线程。当计数器count变为0时,所有线程不再等待,同时运行。 CountDownLatch的作用和 Thread.join()方
2016-01-06 12:20:45 428
原创 CAS自旋锁
昨天写了篇关于AtomicInteger的博客,感觉觉还是不太完整,所以又把自旋锁的知识整理了一下。。。。。。。。。什么是自旋锁 说道自旋锁就要从多线程下的锁机制说起,由于在多处理器系统环境中有些资源因为其有限性,有时需要互斥访问(mutual exclusion),这时会引入锁的机制,只有获取了锁的进程才能获取资源访问。即每次只能有且只有一个进程能获取锁,才能进入自己的临界区
2016-01-05 15:03:20 4471 3
原创 Workspace in use or cannot be created, choose a different one.错误的解决办法
Myeclipse 闪退后重启,有时有会提示错误 Workspace Unavailable:如下图原因:出现这种情况一般是workspace的配置文件中出现了.lock文件(workspace/.metadata/.lock),锁定了workspace。解决方法: 把.lock文件删除即可。 如果该文件不能删除,可能是因为javaw.exe
2016-01-05 11:35:02 696
原创 Java中的静态单多分派与动态单分派
什么是单分派,什么是多分派呢??? 先看定义:根据一个宗量的类型进行方法的选择称为单分派 根据多于一个宗量的类型对方法的选择称为多分派那么宗量又是个什么东东呢????? 再看定义:方法的接受者与方法的参数统称为方法的宗量。定义看着确实有点儿晕,还是直接上例子吧!!!!!!!!!package test;pub
2016-01-04 15:27:20 3858
原创 静态分派与动态分派
静态分派 先看定义:所有依赖静态类型来定位方法执行版本的分派动作成为静态分派。 静态分派典型的应用方法重载你能看出下面代码的输出什么吗????????????class Dog{}class WhiteDog extends Dog{}class BlackDog extends Dog{}public class Person { public
2016-01-04 14:45:14 596
原创 AtomicInteger
AtomicInteger 是一个支持原子操作的 Integer 类,就是保证对AtomicInteger类型变量的增加和减少操作是原子性的,不会出现多个线程下的数据不一致问题。通常情况下,在Java里面,++i或者--i不是线程安全的,这里面有三个独立的操作:或者变量当前值,为该值+1/-1,然后写回新的值。在没有额外资源可以利用的情况下,只能使用加锁才能保证读-改-写这三个操作时“原子性”的。
2016-01-04 12:00:32 1662
原创 一致性Hash算法
基本场景 工程师常使用服务器集群来设计和实现数据缓存,以下是常见的策略: 1、无论是添加、查询、还是删除数据,都先将数据id通过海西函数转换成一个哈希值,记为key。 2、如果目前机器有N台,则计算key%N的值,这个值就是该数据所属的机器编号,无论是添加、删除还是查询操作,都只在这台机器上进行。存在问题 上面场景中的缓存策略的潜在问题是如果增加或删
2016-01-03 14:49:16 610
原创 双亲委派模型
说道双亲委派模型,就要从类加载器说起。。。。。。。。。。。Java虚拟机类加载过程是把Class类文件加载到内存,并对Class文件中的数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的java类型的过程。在加载阶段,java虚拟机需要完成以下3件事:a.通过一个类的全限定名来获取定义此类的二进制字节流。b.将定义类的二进制字节流所代表的静态存储结构转换为方法区的运行时数据结构。c.在...
2016-01-02 15:34:17 19047 16
原创 Java语言中的线程状态转换
Java语言定义了五种线程状态,在任意时间点,一个线程只能有且只有其中一种状态。新建(New) 创建后尚未启动的线程处于这种状态。运行(Runable) Runable包括操作系统线程状态中的Running和Ready,也就是出于此种状态的线程可能正在运行,也可能正在等待着CPU为它分配执行时间。无限期等待(Waiting) 处于该状态的线程不会被分配C
2016-01-02 14:49:59 472
原创 join()方法
join()方法是多线程编程中常用的方法,那么它的适用场合到底是怎样的呢?首先看一下官方解释。 很多情况下,主线程创建并启动子线程,如果子线程中要进行大量耗时运算,主线程往往将早于子线程结束之前结束。这时,如果主线程想等待子线程执行完成后在结束,比如子线程处理的数据,主线程要取得在这个数据中的值,就要使用join()方法了,方法join()的作用是等待县城对象销毁。 官方解
2016-01-02 13:59:59 458
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人