![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java基础
文章平均质量分 52
李树江
生活的理想,就是为了理想的生活。
展开
-
idea maven 无法下载远程快照
最近 idea 无法下载远程快照jar包,确认了maven本地配置无问题,网上各种排查没有解决,最终查看maven文档查看原理解决问题。在任何Maven命令中使用-U参数强制Maven下载最新的快照构建。命令如下:mvn clean package -U文章参考:https://blog.csdn.net/u014209205/article/details/85080374https://www.jianshu.com/p/0c57535d1da8https://www.ite原创 2020-11-21 20:24:33 · 709 阅读 · 0 评论 -
Java并发基础九:并发协作(生产者消费者模型)
对于多线程程序来说,不管任何编程语言,生产者和消费者模型都是最经典的。就像学习每一门编程语言一样,Hello World!都是最经典的例子。实际上,准确说应该是“生产者-消费者-仓储”模型,离开了仓储,生产者消费者模型就显得没有说服力了。对于此模型,应该明确一下几点:1、生产者仅仅在仓储未满时候生产,仓满则停止生产。2、消费者仅仅在仓储有产品时候才能消费,仓空则等待。3、当消费者发现仓储没...原创 2020-04-11 23:38:13 · 188 阅读 · 0 评论 -
Java并发基础八:深入理解Synchronized
前言synchronized,是Java中用于解决并发情况下数据同步访问的一个很重要的关键字。当我们想要保证一个共享资源在同一时间只会被一个线程访问到时,我们可以在代码中使用synchronized关键字对类或者对象加锁。在JDK1.6之前,synchronized的实现直接调用ObjectMonitor的enter和exit,这种锁被称之为重量级锁(用户态和内核态切换)。JDK 1.6之后进...原创 2020-03-25 11:54:21 · 240 阅读 · 0 评论 -
Java并发基础七:深入理解ThreadLocal
ThreadLocal是什么?ThreadLocal是线程本地变量,可以为多线程的并发问题提供一种解决方式,当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。ThreadLocal使用场景①多个线程去获取一个共享变量时,要求获取的是这个变量的初始值的副本。②每...原创 2020-03-24 17:50:23 · 341 阅读 · 1 评论 -
Java并发基础六:并发工具类(3)Semaphore
Semaphore是什么?Semaphore中文意思是信号量,也是一个线程并发的辅助类,Semaphore实现了线程同步框架AQS,它的本质是一个"共享锁",使用Semaphore可以控制同时访问资源的线程个数,但是不保证线程执行顺序。Semaphore原理Semaphore维护了有限数量的许可证,只有得到了许可证的线程才能进行共享资源的访问,如果得不到许可证,说明当前共享资源的访问已...原创 2020-03-23 09:15:49 · 209 阅读 · 0 评论 -
Java并发基础六:并发工具类(2)CyclicBarrier
CyclicBarrier是什么CyclicBarrier是JDK1.5开始提供的并发编程,辅助工具类。用于并发编程的。在源码中使用ReentrantLock 和 Condition 的组合来使用,CyclicBarrier字面意思是“可重复使用的栅栏”。通过它可以实现让一组线程等待至某个状态之后再全部同时执行。利用CyclicBarrier类可以实现一组线程相互等待,当所有线程都到达某个屏...原创 2020-03-22 00:49:05 · 312 阅读 · 0 评论 -
Java并发基础六:并发工具类(1)CountDownLatch
前言CountDownLatch 是基于AQS共享模式特定场景开发的一种同步器,也是在JUC并发包里面的内容。功能:一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。 countdown英文是倒数的意思,"latch"在英文中也是锁的意思。组合在一起可以理解为倒计时锁,当你调用了这个类型对象中的await方法后,必须要等待这个锁倒数到0,才能继续运行。下面就一...原创 2020-03-20 23:25:31 · 213 阅读 · 0 评论 -
Java并发基础五:深入理解AQS
前言JDK1.5 后,Java 引入了 juc 包,队列、重入锁、读写锁、信号量、屏障、Future 等等,为线程调度提供了一系列骚操作,而 AQS 为这些骚操作提供了底层支持。无论怎样的多线程调度,无非就是让线程去竞争同一个资源,竞争成功就运行,竞争失败就挂起,并用一个数据结构维护这些失败者。所以,任何多线程的调度,都是围绕两个问题在讨论: 一如何竞争和释放资源,二怎样维护竞争资源失败的线程...原创 2020-03-19 13:03:32 · 592 阅读 · 0 评论 -
Java并发基础四:CAS详解
前言大家可能都听说说 Java 中的并发包,如果想要读懂 Java 中的并发包,其核心就是要先读懂 CAS 机制,因为 CAS 可以说是并发包的底层实现原理。本篇就带大家读懂 CAS 是如何保证操作的原子性的。背景:在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁,锁机制存在以下问题:(1)在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度...原创 2020-03-15 10:38:26 · 229 阅读 · 0 评论 -
Java并发基础三:Java内存模型(JMM)
前言在并发编程需要处理的两个关键问题是:线程之间如何通信 和 线程之间如何同步。通信 是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:共享内存 和 消息传递。同步: 是指程序用于控制不同线程之间操作发生相对顺序的机制。前篇文章介绍了物理机为了提高效率,引入三级缓存和相关解决缓存一致性的方案,本篇将介绍Java内存模型是什么,为什么需要Java内存模型,以及Java内存...原创 2020-03-14 14:10:24 · 261 阅读 · 0 评论 -
Java并发基础二:CPU内存结构与MESI缓存一致性详解
前言在单核电脑中,处理问题要简单的多。对内存和硬件的要求,各种方面的考虑没有在多核的情况下复杂。电脑中,CPU的运行计算速度是非常快的,而其他硬件比如IO,网络、内存读取等等,跟cpu的速度比起来是差几个数量级的。而不管任何操作,几乎是不可能都在cpu中完成而不借助于任何其他硬件操作。所以协调cpu和各个硬件之间的速度差异是非常重要的,要不然cpu就一直在等待,浪费资源。而在多核中,不仅面临如上...原创 2020-03-12 00:18:14 · 261 阅读 · 0 评论 -
Java并发基础一:线程池详解
前言假如没有线程池,当存在较多的并发任务的时候,每执行一次任务,系统就要创建一个线程,任务完成后进行销毁,一旦并发任务过多,频繁的创建和销毁线程将会大大降低系统的效率。线程池能够对线程进行统一的分配,通过固定数量的线程来负责处理任务,避免了频繁的创建和销毁对象,使线程能够重复的利用,执行多个任务。线程池的优势1、降低资源消耗。通过重复利用已创建的线程降低线程创建、销毁线程造成的消耗。2、...原创 2020-03-10 23:56:07 · 368 阅读 · 0 评论 -
Java数据结构篇七:HashSet详解
HashSet介绍HashSet继承自AbstractSet,HashSet基于HashMap实现的,HashSet 底层使用HashMap 来保存所有元素。将HashSet的数据作为HashMap的Key值保存,利用HashMap的key不可重复从而实现HashSet不含重复元素。所以 ①HashSet中元素不可重复 ②元素存储无序,而且HashSet允许使用 null 元素(仅一个)③线程不...原创 2020-03-06 15:49:39 · 917 阅读 · 0 评论 -
Java数据结构篇六:List集合详解
前言Java集合就像一个容器,可以存储任何类型的数据,也可以结合泛型来存储具体的类型对象。在程序运行时,Java集合可以动态的进行扩展,随着元素的增加而扩大。在Java中,集合类通常存在于java.util包中。Java集合主要由2大体系构成,分别是Collection体系和Map体系,其中Collection和Map分别是2大体系中的顶层接口。Collection主要有三个子接口,分别为...原创 2020-03-05 23:19:50 · 524 阅读 · 0 评论 -
Java数据结构篇五:Hashtable
前言HashTable:(1)不允许null键null值 (2)线程安全 (3)Hashtable默认的初始大小为11,之后每次扩充,容量变为原来的2n+1第1部分 Hashtable介绍Hashtable 简介和HashMap一样,Hashtable 也是一个散列表,它存储的内容是键值对(key-value)映射。Hashtable继承于Dictionary,实现了...原创 2020-03-04 22:01:10 · 295 阅读 · 0 评论 -
Java数据结构篇四:JDK1.7和JDK1.8的HashMap区别
JDK1.7和JDK1.8的HashMap区别JDK7:HashMap底层是数组加链表的形式数组的默认长度为16,加载因子为0.75,也就是16*0.75=12(阈值)当计算出元素的位置在数组中冲突时,那么会以链表的形式存储新的元素,新的元素插在链表的头部,然后将链表下移,也就是将数组中的值赋值给新来的元素,当数组中12个位置被占据时(也就是达到了阈值),同时新插入的元素的插入位置不为...原创 2020-03-04 21:32:57 · 373 阅读 · 0 评论 -
Java数据结构篇三:ConcurrentHashMap详解
深入解析 ConcurrentHashMap 实现内幕,吊打面试官?没问题在开发中,我们经常使用 HashMap 容器来存储 K-V 键值对,但是在并发多线程的情况下,HashMap 容器又是不安全的,因为在 put 元素的时候,如果触发扩容操作,也就是 rehash ,就会将原数组的内容重新 hash 到新的扩容数组中,但是在扩容这个过程中,其他线程也在进行 put 操作,如果这两个元...转载 2020-03-04 20:20:01 · 864 阅读 · 1 评论 -
Java数据结构篇二:HashMap详解
前言HashMap 又叫 Hash 表或散列表,是基于哈希表的 Map 接口实现。此实现提供了基于 Key-Value 映射结构数据的所有可选操作,如:增、删、改、查等。HashMap 并不保证映射顺序,特别是它不保证插入顺序恒久不变。HashMap是面试常考的知识点,对该知识点有必要进行一下系统的学习。首先简单介绍一下和 HashMap 有亲戚关系的三个类,分别为 LinkedHashM...原创 2020-03-03 23:05:09 · 332 阅读 · 0 评论 -
Java数据结构篇一:数组详解
项目开发中,如果需要存储大量的数据,例如如果需要读取100个数,那么就需要定义100个变量,显然重复写100次代码,是没有太大意义的。Java语言提供了数组(array)的数据结构,可以解决这个问题。数组的概念一个数组是相同数据类型的元素按一定顺序排列的集合。使用数组可以将同一类型的数据存储在连续的内存位置。数组中各元素的类型相同,通过下标的方式来访问数组中的元素,下标从0开始。由此得...原创 2020-03-02 16:30:34 · 1032 阅读 · 0 评论 -
Java基础知识之String详解
前言:面试的时候,String类型经常会被问到。虽然是一个小的知识点,但是面试的时候也容易被搞死,现在系统的学习下String知识点,以作记录。一、String必备知识点1.什么是String,它是什么数据类型String是定义在 java.lang 包下的一个类。它不是基本数据类型。属于引用数据类型。2.String对象的声明方式1.同使用其他类一样通过new关键字来创建。使用...原创 2020-02-16 19:32:24 · 1317 阅读 · 0 评论 -
Java基础之数据类型
一、基础概念1.Java 分为两大数据类型:基本数据类型Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。引用类型引用类型指向一个对象,指向对象的变量是引用变量。这些变量在声明时被指定为一个特定的类型,比如 Employee、Puppy 等。变量一旦声明后,类型就不能被改变了。2.数据类型转换自动类型转换运算中,不同类型的数据先...原创 2020-01-19 18:18:47 · 345 阅读 · 0 评论