0%

本篇文章主要针对线程的基本概念进行介绍,然后看下java中的具体实现

要理解线程,需要先看下什么是进程,进程是对运行时程序的封装,是系统进行资源调度和分配的的基本单位,实现了操作系统的并发;

线程是进程的子任务,是CPU调度和分派的基本单位,用于保证程序的实时性,实现进程内部的并发;线程是操作系统可识别的最小执行和调度单位。每个线程都独自占用一个虚拟处理器:独自的寄存器组,指令计数器和处理器状态。每个线程完成不同的任务,但是共享同一地址空间(也就是同样的动态内存,映射文件,目标代码等等),打开的文件队列和其他内核资源。

阅读全文 »

在并发编程过程中,我们大部分的焦点都放在如何控制共享变量的访问控制上(代码层面),但是很少人会关注系统硬件及JVM底层相关的影响因素。前段时间学习了一个牛X的高性能异步处理框架 Disruptor,它被誉为“最快的消息框架”,其LMAX架构能够在一个线程里每秒处理6百万订单!在讲到Disruptor为什么这么快时,接触到了一个概念——伪共享( false sharing ),其中提到:缓存行上的写竞争是运行在SMP系统中并行线程实现可伸缩性最重要的限制因素。由于从代码中很难看出是否会出现伪共享,有人将其描述成无声的性能杀手。

阅读全文 »

内部类的定义与分类

在《Thinking in Java》这本书里面给出的定义是:可以将一个类的定义放在另一个类的定义内部就是内部类。用一段代码来说明就是下面这样的

1
2
3
>class Outter{
>class InnerClass{}
>}

其中InnerClass就是内部类。

内部类大体上可以划分为以下几种:成员内部类,局部内部类,静态内部类,匿名内部类。下面我将依次讲解这几种内部类。

阅读全文 »

概要

本篇博客的内容如下

  1. 使用背景
  2. 枚举定义和使用
  3. 深度分析Java的枚举类型—-枚举的线程安全性及序列化问题
    阅读全文 »

泛型中 < ? extends T > 和 < ? extends T > 的区别

这俩个主要用于对参数的保护,如果你看过Java api 源码的话,你经常看到方法参数类似上面的写法。

概要

  1. 类型擦除
  2. 逆变与协变
  3. ?的用法
  4. extends 的用法
  5. super的用法
  6. PECS原则
阅读全文 »

Iterator(迭代器)

作为一种设计模式,迭代器可以用于遍历一个对象,对外提供统一的遍历接口,而使得开发人员不用去了解这个对象的底层结构。
这里就不仔细说迭代器这种设计模式,因为我们主要的目的是探索java中Iterator和 Iterable的基本使用,并说明俩则的区别

阅读全文 »