12 2016 档案
摘要:类型约束: 继承接口或者类,都用extends关键字 限制类型 ArrayList中的泛型必须继承是List(当然这里List是接口,不可能,但是类型可以)或者List的子类 使用super关键字,泛型必须是继承的类型的自己或者其父类。 类型限定在泛型类、泛型接口和泛型方法中都可以使用,不过要注意下
阅读全文
摘要:代码: 双重检查,懒汉模式 优点:使用了双重检查,很大程度上避免了线程不安全,同时也避免了不必要的锁开销。这里要注意,虽然未使用volatile关键字,但是这里的synchronized已经保证了INSTANCE写操作对其它线程读操作的可见性。 缺点:性能开销有点大 静态常量,饿汉模式 优点:实现简
阅读全文
摘要:java通常的代码无法直接使用操作底层的硬件,为了使java具备该能力,增加了Unsafe类 java的并发包中底层大量的使用这个类的功能,了解这个类有助于了解java 并发包,理解为什么并发包中的类的并发性能为什么会比使用synchronized好 Atomic包介绍 在Atomic包里一共有12
阅读全文
摘要:基数排序(Radix Sort)是在桶排序的基础上发展而来的,两种排序都是分配排序的高级实现。 分配排序(Distributive Sort)的基本思想:排序过程无须比较关键字,而是通过“分配”和“收集”过程来实现排序。它们的时间复杂度可达到线性阶:O(n)。 基数排序代码: [7, 8, 9, 6
阅读全文
摘要:归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解。 分治算法的一般步骤: (1
阅读全文
摘要:插入排序分为直接插入排序和希尔排序 直接插入排序: 直接插入排序原理就是,假设前面n-1(n>=2)个元素已经排好序,现在要把第n个元素找到正确的位置并插入。 [7, 8, 9, 6, 1, 4, 3, 2, 5, 0, -1, -2, 10, -3] 第1轮排序结果:[7, 8, 9, 6, 1,
阅读全文
摘要:选择排序有简单选择排序,堆排序 简单选择排序: [9, 8, 7, 6, 5, 4, 3, 2, 1, 0, -1, -2, -3] 第1轮排序结果:[-3, 8, 7, 6, 5, 4, 3, 2, 1, 0, -1, -2, 9] 第2轮排序结果:[-3, -2, 7, 6, 5, 4, 3,
阅读全文
摘要:首先排序分为四种: 交换排序: 包括冒泡排序,快速排序。 选择排序: 包括直接选择排序,堆排序。 插入排序: 包括直接插入排序,希尔排序。 归并排序 基数排序 交换排序主要有两种: 1:冒泡排序 Before sort: [-3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8,
阅读全文
摘要:在AQS里面进行阻塞线程,解除阻塞线程就用的LockSupport。 JDK1.8源码: package java.util.concurrent.locks; import sun.misc.Unsafe; public class LockSupport { private LockSuppor
阅读全文
摘要:生产者-消费者(producer-consumer)问题,也称作有界缓冲区(bounded-buffer)问题,两个进程共享一个公共的固定大小的缓冲区。其中一个是生产者,用于将消息放入缓冲区;另外一个是消费者,用于从缓冲区中取出消息。问题出现在当缓冲区已经满了,而此时生产者还想向其中放入一个新的数据
阅读全文
摘要:BlockingQueue接口定义了一种阻塞的FIFO queue,每一个BlockingQueue都有一个容量,让容量满时往BlockingQueue中添加数据时会造成阻塞,当容量为空时取元素操作会阻塞。 ArrayBlockingQueue是一个由数组支持的有界阻塞队列。在读写操作上都需要锁住整
阅读全文
摘要:不需要分页时,直接在select内添加option列表 如果要分页的话 这里要注意的一个问题是,后台返回的数据列表必须含有id这个字段,不然会出现问题,一直不能选中数据。 这个不知道的人,被坑死了!
阅读全文
摘要:SynchronousQueue是无界的,是一种无缓冲的等待队列,但是由于该Queue本身的特性,在某次添加元素后必须等待其他线程取走后才能继续添加;可以认为SynchronousQueue是一个缓存值为1的阻塞队列,但是 isEmpty()方法永远返回是true,remainingCapacity
阅读全文
摘要:看代码看到 接口不能new ,不过可以生成一个匿名类,省略了写一个具体类实现接口的开销。 如果接口内有多个方法呢? 匿名类内部实现接口全部方法: 这种实现接口方式其实就是一个实现一个继承接口的匿名类。 http://blog.sina.com.cn/s/blog_70441c8e0101sgnf.h
阅读全文
摘要:这两个队列都是线程安全的。 LinkedBlockingQueue: 此队列按 FIFO(先进先出)排序元素。队列的头部 是在队列中时间最长的元素。队列的尾部 是在队列中时间最短的元素。新元素插入到队列的尾部,并且队列检索操作会获得位于队列头部的元素。 链接队列的吞吐量通常要高于基于数组的队列,但是
阅读全文
摘要:submit方法: submit返回的最终是FutureTask对象 execute方法: 具体的实现在ThreadPoolExecutor类中 submit内部调用execute submit有返回值 submit方便exception处理 submit的demo: call()方法被自动调用,干
阅读全文
摘要:Future表示一个任务的周期,并提供了相应的方法来判断是否已经完成或者取消,以及获取任务的结果和取消任务。 Future接口源码: public interface Future<V> { boolean cancel(boolean mayInterruptIfRunning); boolean
阅读全文