看完这篇Linux基本的操作就会了
这个学期开了Linux的课程了,授课的老师也是比较负责任的一位。总的来说也算是比较系统地学习了一下Linux了~~~ 相信大部分人的PC端都是用Windows系统的,那我们为什么要学习Linux这个操作系统呢???Windows图形化界面做得这么好,日常基本使用的话,学习成本几…
包装模式就是这么简单啦
其实无论是代理模式还是装饰模式。本质上我认为就是对原有对象增强的方式~ 很多时候我们可能对Java提供给我们的对象不满意,不能满足我们的功能。此时我们就想对Java原对象进行增强,能够实现我们想要的功能就好~ 最简单的方式就是继承父类,子类扩展来达到目的。虽然简单,但是这种方式…
给女朋友讲解什么是代理模式
多线程就先告一段落了,昨天写完多线程,本来打算是看IO的知识点的,后来看了一下IO的几种模型,又翻了一下《Java编程思想》。不知道从哪下手~~ 看到这里你以为我要讲装饰模式了么?不是,今天我们来讲讲什么是代理模式(就是这么皮,装饰模式明天讲吧~)。 由标题可知,这篇文章是写给…
多线程之死锁就是这么简单
本篇主要是讲解死锁,这是我在多线程的最后一篇了。主要将多线程的基础过一遍,以后有机会再继续深入! 在Java中使用多线程,就会有可能导致死锁问题。死锁会让程序一直卡住,不再程序往下执行。我们只能通过中止并重启的方式来让程序重新执行。 线程A和线程B都继续执行,此时线程A需要ri…
线程池你真不来了解一下吗?
本篇主要是讲解线程池,这是我在多线程的倒数第二篇了,后面还会有一篇死锁。主要将多线程的基础过一遍,以后有机会再继续深入! 线程池可以看做是线程的集合。在没有任务时线程处于空闲状态,当请求到来:线程池给这个请求分配一个空闲的线程,任务完成后回到线程池中等待下次任务**(而不是销毁…
Object对象你真理解了吗?
之前花了点之间时间去搞多线程的基础知识了,难呀难呀难呀....打算还写一篇线程池的就暂时将多线程系列停止了... 我们学Java的知道,Java是一门面向对象的语言。无论在Java中出现什么,都可以认为它是对象(除了八大基本数据类型。当然了,八大基本数据类型也能装箱成为对象):…
Lock锁子类了解一下
这个方法主要是判断当前线程是否位于CLH同步队列中的第一个。如果是则返回flase,否则返回true。 一般来说:我们大多数都是读取数据得多,修改数据得少。所以这个读写锁在这种场景下就很有用了! ReentrantReadWriteLock是一个读写锁,如果读的线程比写的线程要…
AQS简简单单过一遍
本来我是打算在这章节中写Lock的子类实现的,但看到了AQS的这么一个概念,可以说Lock的子类实现都是基于AQS的。 AQS我在面试题中也见过他的身影,但一直不知道是什么东西。所以本篇我就来讲讲AQS这个玩意吧,至少知道它的概念是什么,对吧~ 不要被人家唬到了,以为juc是什…
Java锁机制了解一下
其实都比较坑,如果能先系统讲了Synchronized锁机制,接着讲显式Lock锁机制,那就很容易理解了。也不需要跨那么多章节。 synchronized保证了线程的原子性。(被保护的代码块是一次被执行的,没有任何线程会同时访问) synchronized还保证了可见性。(当执…
多线程基础必要知识点!看了学习多线程事半功倍
不小心就鸽了几天没有更新了,这个星期回家咯。在学校的日子要努力一点才行! 本文章的知识主要参考《Java并发编程实战》这本书的前4章,这本书的前4章都是讲解并发的基础的。要是能好好理解这些基础,那么我们往后的学习就会事半功倍。 当然了,《Java并发编程实战》可以说是非常经典的…
Thread源码剖析
在写文章之前通读了一遍《Java 核心技术 卷一》的并发章节和《Java并发编程实战》前面的部分,回顾了一下以前写过的笔记。从今天开始进入多线程的知识点咯~ 实现多线程从本质上都是由Thread类来进行操作的~我们来看看Thread类一些重要的知识点。Thread这个类很大,不…
多线程三分钟就可以入个门了!
在写文章之前通读了一遍《Java 核心技术 卷一》的并发章节和《Java并发编程实战》前面的部分,回顾了一下以前写过的笔记。从今天开始进入多线程的知识点咯~ 之前在学习Java基础的时候学多线程基础还是挺认真的,可是在后面一直没有回顾它,久而久之就把它给忘掉得差不多了..在学习…
Java集合总结【面试题+脑图】,将知识点一网打尽!
着重标出的那些就是我们用得最多的容器。 其实,我也不知道要怎么总结好,因为之前写每一篇的时候都总结过了。现在又把他们重新罗列出来好像有点水,所以,我决定去回答一些Java容器的面试题! 当然了,我的答案未必就是正确的。如果有错误的地方大家多多包含,希望不吝在评论区留言指正~~ …
3分钟搞掂Set集合
A::底层数据结构由哈希表(是一个元素为链表的数组)和双向链表组成。 所以可以直接总结出:HashSet实际上就是封装了HashMap,操作HashSet元素实际上就是操作HashMap。这也是面向对象的一种体现,重用性贼高! 底层实际上是一个HashMap+双向链表实例(其实…
ConcurrentHashMap基于JDK1.8源码剖析
这个类听得也挺少的,在集合中是比较复杂的一个类了,它涉及到了一些多线程的知识点。 ConCurrentHashMap的底层是:散列表+红黑树,与HashMap是一样的。 Hashtable是在每个方法上都加上了Synchronized完成同步,效率低下。 ConcurrentH…
TreeMap就这么简单【源码剖析】
如果我们设置key为null,会抛出异常的,就不执行下面的代码了。 平衡红黑树的代码是比较复杂的,我就不说了,你们去看吧(反正我看不懂).... 如果在构造方法中传递了Comparator对象,那么就会以Comparator对象的方法进行比较。否则,则使用Comparable的…
LinkedHashMap就这么简单【源码剖析】
在构建新节点时,构建的是LinkedHashMap.Entry 不再是Node. 所以,LinkedHashMap的put方法和HashMap是一样的。 LinkedHashMap比HashMap多了一个双向链表的维护,在数据结构而言它要复杂一些,阅读源码起来比较轻松一些,因为…
HashMap就是这么简单【源码剖析】
threshold这个成员变量是阈值,决定了是否要将散列表再散列。它的值应该是:capacity * load factor才对的。 我们是根据key的哈希值来保存在散列表中的,我们表默认的初始容量是16,要放到散列表中,就是0-15的位置上。也就是tab[i = (n - 1…
Map集合、散列表、红黑树介绍
前面我们学习的Collection叫做集合,它可以快速查找现有的元素。 而Map在《Core Java》中称之为-->映射.. 作为学生来说,我们是根据学号来区分不同的学生。只要我们知道学号,就可以获取对应的学生信息。这就是Map映射的作用! 但同时,这会带来缺点:想要获取某个…
List集合就这么简单【源码剖析】
前一篇已经讲了Collection的总览:Collection总览,介绍了一些基础知识。 底层数据结构是数组。线程不安全 底层数据结构是链表。线程不安全 底层数据结构是数组。线程安全 第一次扩容后,如果容量还是小于minCapacity,就将容量扩充为minCapacity。 …