自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 收藏
  • 关注

原创 Condition接口的await、signal机制

1. Condition中的await、signal与内建锁wait、notify的区别 Object类提供的wait与notify方法是与对象监视器monitor配合完成线程的等待与通知机制,属于JVM底层实现。 而Cobdition与Lock配合完成的等待通知机制属于java语言级别,具有更高的控制与扩展性。 Condition独有特性: I.支持不响应中断,而Object不支持 II.支...

2019-02-28 17:22:53 554

原创 ReentrantReadWriteLock----可重入读写锁

读写锁:允许同一时刻被多个读线程访问,但是在写线程访问时,所有的读线程与其他的写线程均会阻塞。 写线程能够获取到锁的前提条件:没有任何读、写线程拿到锁。 1. 写锁-WriteLock-独占锁 1.1 写锁的获取 - 模板方法tryAcquire() 源码: protected final boolean tryAcquire(int acquires) { /* ...

2019-02-28 13:27:29 270

原创 ReentrantLock----独占式重入锁的深入理解

ReentrantLock是重入锁 重入:表示能够对共享资源重复加锁,即当前线程再次获取锁时不会被阻塞。 1. 那重入锁是如何实现的呢? 如果该同步状态不为0,表示此时同步状态已被线程获取。再判断持有同步状态的线程是否是当前线程,如果是,同步状态再次+1并返回true,表示持有线程重入同步块。 释放过程: 当且仅当同步状态减为0并且持有线程为当前线程时表示锁被正确释放。 否则调用setState(...

2019-02-28 12:22:46 216

原创 lock体系

之前本来在写完多线程之后就写lock体系的,可以作以对比,但之后又写了其他知识的博客,一直拖到今天才写lock相关的知识,大家在看lock锁的时候,可以对比着看内建锁,对比对比lock锁和内建锁的优缺点。 这是我那篇关于内建锁的博客链接:https://blog.csdn.net/huaijiu123/article/details/85242821 lock在Java的util包下 lock体系...

2019-02-25 13:41:40 358

原创 什么是进程?什么是线程

进程 进程指的是一个程序的生命周期,也就是一段程序从开始执行到结束,这就是该程序的进程。 线程 一般一个程序中会有多个任务,一个任务就叫做一个线程。 创建、撤销一个线程比创建、撤销一个进程的开销要少得多 ...

2019-02-23 16:03:01 1581

原创 TreeMap

TreeMap是一个可以排序的Map子类,它是按照key的内容排序的。 import java.util.HashMap; import java.util.Map; import java.util.TreeMap; public class Test { public static void main(String[] args) { Map<Integer, ...

2019-02-17 17:30:56 188 1

原创 ConcurrentHashMap

为什么已经有了Hashtable还需要ConcurrentHashMap呢? 因为Hashtable效率比较低,它的实现是在方法上加synchronized。也就是说导致了所有并发操作都要竞争同一把锁,一个线程在进行同步操作时,其他线程只能等待,大大降低了并发操作的效率。 ConcurrentHashMap的内部结构: 它是将桶的内部进行了分段处理。每个桶里还是以链表的形式存储数据。 Concu...

2019-02-17 15:36:32 173

原创 Hashtable与HashMap的区别

2019-02-17 12:59:31 161

原创 Map接口

Map接口有四个常用子类:Hashtable、HashMap、TreeMap、ConcurrentHashMap。 Map接口的定义: public interface Map<K, V> Map接口的常用方法: public V put(K key, V value)-----向Map中追加数据 public V get(Object key)--------根据key值取得对应...

2019-02-17 12:51:26 173

原创 如何利用TreeSet实现数据的排序(Comparable、Comparator )

排序实际上针对的是对对象数组进行的排序处理,如果要对对象数组进行排序,对象所在的类一定要实现Comparable接口(可比较接口)并且覆写compareTo()方法,但如果这个类不是我们自己定义的,那就没办法比较了,所以这个方法很不灵活。 例: Person.java public class Person implements Comparable<Person>{ priv...

2019-02-17 10:55:46 1037

原创 线程池

线程池在juc包下。 线程池是用来实现多线程的,那已经有Runnable和Callable实现多线程了,为什么还要线程池呢? 因为使用线程池有以下三个优点: 降低资源消耗:通过重复利用已创建的线程降低线程创建和销毁带来的消耗(当一个线程跑完一个任务之后,不会被销毁,会再次给这个线程分配一个新任务) 提高响应速度:当任务到达时,任务可以不需要等待线程创建就能立即执行(因为线程池中一直有空闲的线程在...

2019-02-16 19:22:38 196

原创 Java内存模型

1. 主内存与工作内存 主内存:指的就是操作系统内存 工作内存:指的是创建线程所使用的内存 线程对变量的读写操作不是直接对主内存操作的,而是在工作内存操作的。 线程、主内存、工作内存三者的交互关系就和下图一样: 2. 内存间交互操作 Java内存模型中定义了8种操作来完成一个变量从主存中拷贝到工作内存、从工作内存同步回主存的实现细节。JVM实现时必须保证以下这8种操作的每一种操作都是原子的、不可...

2019-02-15 16:17:03 194

原创 JVM的垃圾回收算法

1. 标记-清除算法 标记-清除算法分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象。 但该算法也有不足之处: 效率问题:标记和清除这两个过程的效率都不高 空间问题:标记清除后会产生大量不连续的内存碎片,空间碎片太多可能会导致以后在程序运行中需要分配较大对象时,无法找到足够连续内存而不得不提前触发另一次垃圾回收。 2. 复制算法(新生代回收算...

2019-02-14 17:47:09 234

原创 JVM如何判断对象已“死”(可达性分析算法)

Java堆上存放着几乎所有对象实例,垃圾回收器在对堆进行垃圾回收前需要判断哪些对象还存活?哪些对象已经“死去”(不再被引用)? 除了可达性分析算法外还有引用计数法。 引用计数法 例: A对象引用了B对象,给B对象的计数器+1 C对象也引用了B对象,给B对象的计数器再+1 当引用失效时,计数器-1 任何时刻计数器为0的对象就是不能再被使用的,即对象已“死”,才可以被回收。 这就是引用计数法 虽然引用...

2019-02-14 14:38:31 1023

原创 HashMap源码剖析

HashMap是Map集合中的一个子类。 那我们来想想它的底层到底是怎样实现的,比如:它存储数据是以链表存储还是数组存储?它的容量是多大?如果是数组存储,会不会扩容?什么时候扩容? 这些问题都需要我们看源码,通过分析源码来得出结论。 实际上HashMap可以看作是数组和链表结合组成的复合结构。 说它是一个复合结构,那它到底是怎样复合的呢? 我们可以先来看一幅图: 看到这幅图,我决定大家心中都理解...

2019-02-13 16:53:21 105

原创 Java内存区域与内存溢出异常

1. 运行时数据区域 线程私有区域:程序计数器、Java虚拟机栈、本地方法栈 线程共享区域:Java堆、方法区、运行时常量池 1.1 程序计数器( 线程私有) 程序计数器指的是当前线程执行的代码的位置。 程序计数器是为了方便指令跳转,记录下当前指令的位置,等执行完跳转指令后可以根据计数器里的地址回到跳转前的位置,继续往下执行。 如果当前线程正在执行的是一个java方法,这个java方法正在执行一个...

2019-02-13 16:25:41 136

原创 什么是JVM

首先我们大家都知道java是跨平台的,那它为什么会跨平台呢? 我们可以先来看看这幅图: Java源码编译成字节码,字节码才会运行,字节码运行时操作系统是没办法直接运行的,我们需要java运行环境(JRE),JRE(包含java运行时需要的一系列类库、JVM(虚拟机))将java的字节码解释成机器能识别的指令。 JVM其实就是一个虚拟机,执行java编译好的字节码文件。 区分JDK、JRE、JVM...

2019-02-13 10:43:32 398

原创 MySQL中对表的约束-----主键

用主键primary key来约束的字段里的数据不能重复,不能为空,一张表中最多只能有一个主键 主键可以在创建表的时候指定,也可以在创建表完成后追加。 例:创建表的时候直接在字段上指定主键 create table tt1( id int unsigned primary key comment '学号不能为空', name varchar(20) not null); ...

2019-02-02 19:40:17 443

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除