Hello World

随笔分类 -  Java

摘要: 阅读全文
posted @ 2018-08-20 08:29 小小忧愁米粒大 阅读(178) 评论(0) 推荐(0)
摘要:传送门 : Java7/8中ConcurrentHashMap全解析 1.基本属性 元素存储在Node类型的table[]中 线程安全通过Synchronzied和CAS操作实现 1.1 sizeCtl -1代表正在初始化 -N 表示有N-1个线程正在进行扩容操作 正数或0代表hash表还没有被初始 阅读全文
posted @ 2018-08-20 00:28 小小忧愁米粒大 阅读(144) 评论(0) 推荐(0)
摘要:传送门:Java 8系列之重新认识HashMap HashMap 里面是一个数组,然后数组中每个元素是一个单向链表。 链表中存储的是一个个Node 节点, Node 包含四个属性:key, value, hash 值和用于单向链表的 next。 1.基本属性 2. put() 2.1 计算数组下标 阅读全文
posted @ 2018-08-18 15:51 小小忧愁米粒大 阅读(146) 评论(0) 推荐(0)
摘要:1. 概述 泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。 那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。 泛 阅读全文
posted @ 2018-08-16 19:48 小小忧愁米粒大 阅读(208) 评论(0) 推荐(0)
摘要:1. 概述 底层使用双向链表实现; 支持对头节点和尾节点进行直接操作; 元素可以为null; 元素的增加删除效率较高,增加删除时只需要改变当前节点和前后节点的关系即可. 元素的查询操作效率较低,需要一个一个遍历查找. 此类实现 Deque 接口,为 add、poll 提供先进先出队列操作,以及其他堆 阅读全文
posted @ 2018-08-14 19:30 小小忧愁米粒大 阅读(179) 评论(0) 推荐(0)
摘要:1. 基本属性 底层使用动态数组实现 1.1 DEFAULTCAPACITY_EMPTY_ELEMENTDATA 无参构造器中初始化数组 确定扩容后的大小 2. 扩容 3. subList 4. 迭代器 此类的 iterator 和 listIterator 方法返回的迭代器是快速失败的:在创建迭代 阅读全文
posted @ 2018-08-09 21:08 小小忧愁米粒大 阅读(210) 评论(0) 推荐(0)
摘要:原文地址:深入JVM锁机制1-synchronized 1. 线程的状态与转换 当多个线程同时请求某个对象监视器时,对象监视器会设置几种状态用来区分请求的线程: Contention List:所有请求锁的线程将被首先放置到该竞争队列 Entry List:Contention List 中那些有资 阅读全文
posted @ 2018-08-09 19:47 小小忧愁米粒大 阅读(352) 评论(0) 推荐(0)
摘要:14.1 状态依赖性管理 基于先检查后执行的状态依赖性操作在多线程下常常发生一些我们不希望的结果.因此有必要对状态依赖操作进行管理, 重试的实现方式 : 自旋等待. 在条件不成立时一直询问, 直到条件成立. 会消耗大量的CPU时间 休眠. 如果条件不成立, 则休眠一段时间, 休眠过后继续测试条件是否 阅读全文
posted @ 2018-08-09 00:10 小小忧愁米粒大 阅读(186) 评论(0) 推荐(0)
摘要:Java 5.0 提供的新的加锁机制:当内置加锁机制不适合时 , 作为一种可选择的高级功能 一个可重入的互斥锁 Lock,它具有与使用 synchronized 方法和语句所访问的隐式监视器锁相同的一些基本行为和语义,但功能更强大。 13.1 Lock 与 ReentrantLock Lock 中实 阅读全文
posted @ 2018-08-09 00:09 小小忧愁米粒大 阅读(196) 评论(0) 推荐(0)
摘要:6.1 在线程中执行任务 围绕任务执\执行设计应用程序结构 .讲一个复杂的功能分解为多个独立的任务. 并可以并行执行, 在调度和负载均衡过程中实现更高的灵活性. 6.1.1 串行的执行任务 在单个线程中串行的执行各项任务. 6.1.2 显示的创建任务 正常负载情况下, 为每个任务分配一个线程可以提升 阅读全文
posted @ 2018-08-09 00:08 小小忧愁米粒大 阅读(168) 评论(0) 推荐(0)
摘要:5.1 同步容器类 实现方式 : 将他们的状态封装起来,并对每个公有方法都进行同步, 使得每次只有一个线程可以访问. 5.1.1 存在的问题 复合操作 并非线程安全. 比如 迭代, 条件运算等. 在对同步容器类的复合操作加锁时一定要以容器对象为锁对象, 保证复合操作的锁对象和容器使用的锁对象一致.才 阅读全文
posted @ 2018-08-09 00:05 小小忧愁米粒大 阅读(216) 评论(0) 推荐(0)
摘要:4.1 设计线程安全的类 三个基本要素 : 找出构成对象状态的所有变量 找出约束状态变量的不变性条件 建立对象状态的并发访问管理策略 4.1.1 同步需求 如果不了解对象的不变性条件与后验条件,那么就不能确保线程安全性. 要满足在状态变量的有效值或状态转换上的各种约束条件, 则需要借助于原子性和封装 阅读全文
posted @ 2018-08-08 23:51 小小忧愁米粒大 阅读(139) 评论(0) 推荐(0)
摘要:类的小工具包,支持在单个变量上解除锁的线程安全编程。事实上,此包中的类可将 volatile 值、字段和数组元素的概念扩展到那些也提供原子条件更新操作的类. 传送门 : 并发编程网 Java中的Atomic包使用指南 一. 使用原子方式更新的指定元素的值 1. AtomicBoolean 2. At 阅读全文
posted @ 2018-08-08 23:50 小小忧愁米粒大 阅读(513) 评论(0) 推荐(0)
摘要:Java中的魔法类:sun.misc.Unsafe示例详解 。Unsafe类使Java拥有了像C语言的指针一样操作内存空间的能力。 阅读全文
posted @ 2018-08-08 22:30 小小忧愁米粒大 阅读(205) 评论(0) 推荐(0)
摘要:更多干货尽在 一行一行源码分析清楚AbstractQueuedSynchronizer 一. 概述 为实现依赖于先进先出 (FIFO) 等待队列的阻塞锁和相关同步器(信号量、事件,等等)提供一个框架。 此类的设计目标是成为依靠单个原子 int 值来表示状态的大多数同步器的一个有用基础。 子类必须定义 阅读全文
posted @ 2018-08-08 22:29 小小忧愁米粒大 阅读(174) 评论(0) 推荐(0)
摘要:package com.pinnet.test; public class Demo { public static void main(String[] args) { Demo demo = new Demo(); new Thread(new Runnable() { @Override pu 阅读全文
posted @ 2018-08-08 22:23 小小忧愁米粒大 阅读(1188) 评论(0) 推荐(0)
摘要:synchronize 的另一个作用 : 内存可见性. 3.1 可见性 为了确保多个线程之间对内存写入操作的可见性,必须使用同步机制. 指令重排序 : 编译器或运行时环境为了优化程序性能而采取的对指令进行重新排序执行的一种手段. 3.1.1 失效数据 非线程安全下读取变量时可能读取到一个失效的值. 阅读全文
posted @ 2018-08-08 22:19 小小忧愁米粒大 阅读(131) 评论(0) 推荐(0)
摘要:2.0 简介 线程安全的核心: 对 对象状态(包括实例和静态域)操作的访问顺序进行管理. Java 的主要同步机制: synchronize(独占的加锁方式) volatile(值被修改后立即对其他线程可见) Lock(显示锁, 提供了比使用 synchronized 方法和语句可获得的更广泛的锁定 阅读全文
posted @ 2018-08-08 22:05 小小忧愁米粒大 阅读(169) 评论(0) 推荐(0)
摘要:1.1 并发简史 操作系统使得计算机每次能运行多个程序,并且不同的程序都在单独的进程中运行: 操作系统为每个独立的进程分配各种资源,包括内存,文件句柄和安全证书等. 如果需要的话,在不同进程之间可以通过一些粗粒度的通信机制来交换数据, 包括套接字,信号处理器,共享内存,信号量及文件 计算机加入操作系 阅读全文
posted @ 2018-08-08 21:28 小小忧愁米粒大 阅读(168) 评论(0) 推荐(0)

瞅啥瞅,好好看书