Java

Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等,是目前企业级应用的主力编程语言。

最新博文

  • 【顶】 深入理解Java内存模型

    Java多线程与高并发 深入理解Java内存模型

    注意这里是Java内存模型,不是Java内存结构,这两个就不是在同一级别上的东东,有些人会把Java内存模型误解为Java内存结构,然后在面试问到的时候很自信的答到堆,栈,GC垃圾回收,最后和面试官想问的问题相差甚远。本文我们就来学习一下JMM有关的基础知识吧!思维导图什么是JMM?JMM就是...

    2020-09-25 10

    阅读全文
  • 【顶】 玩转Java8 Stream之IntStream

    Java基础 玩转Java8 Stream之IntStream

    IntStream详解IntStream是特殊的Stream,但有一些操作符是IntStream独有的;话不多说,开始玩转IntStream吧。理论讲解构造IntStreamIntStream这个接口里提供了如下方法用于构造一个流:操作IntStream过滤操作filter()//根据条件过滤...

    2020-09-08 31

    阅读全文
  • 【顶】 Integer与int的比较

    Java基础 Integer与int的比较

    如果面试官问Integer与int的区别:估计大多数人只会说到两点:Ingeter是int的包装类,注意是一个类;int的初值为0,Ingeter的初值为null。但是如果面试官再问一下Integeri=1;intii=1;i==ii为true还是为false?估计就有一部分人答不出来了,如果...

    2020-08-28 46

    阅读全文
  • Java并发编程实践

    Java多线程与高并发 Java并发编程实践

    一、使用两个线程交替打印输出“1A2B3C…..26Z”具体描述:使用两个线程,一个输出字母,一个输出数字,交替输出1A2B3C……26Z1、LockSupport使用JUC下的LockSupport工具类我们可以精确的阻塞或唤醒一个线程,并且Lock...

    2020-08-06 71

    阅读全文
  • Hashtable源码分析

    Java集合与容器 Hashtable源码分析

    Hashtable是一个比较古老的Map实现类,从它的名称就可以看得出来,因为没有遵循Java语言的驼峰命名规范,这可能是开发者的疏忽导致的吧。它和HashMap很像,同属于散列表,都可以存储K-V键值对,并且都可以实现O(1)的查找时间复杂度。有以下特性:1、首先就是线程安全,这也估计算是唯...

    2020-08-02 73

    阅读全文
  • 关于HashMap几个刁钻的面试题,第四个我就跪了

    Java集合与容器 关于HashMap几个刁钻的面试题,第四个我就跪了

    HashMap刁钻面试题总结1、HashMap的数据结构是什么?答:在jdk1.7是采用了数组+链表;jdk1.8采用了数组+链表+红黑树,当链表长度大于等于的时候转化为红黑树,当红黑树的结点小于等于6的是时候就有红黑树转化为链表;2、为什么要采用数组+链表作为存储结构?首先要清楚一个基本的理...

    2020-07-28 98

    阅读全文
  • 深入浅出 Java 8 Lambda 表达式和函数式接口

    Java基础  深入浅出 Java 8 Lambda 表达式和函数式接口

    1、为什么Java需要Lambda表达式?Java是一门的面向对象语言,除了部分简单数据类型,Java中的一切都是对象,即使数组也是一种对象。在Java中定义的函数或方法不可能完全独立,也不能将方法作为参数或返回一个方法给实例。在Swing编程中,我们总是通过匿名类给方法传递函数功能,以下是旧...

    2020-07-11 115

    阅读全文
  • 一文让你理解as-if-serila和happens-before语义

    Java多线程与高并发 一文让你理解as-if-serila和happens-before语义

    概述本文参考《Java并发编程的艺术》一书,温故而知新,加深对基础的理解。一、指令序列的重排序我们在编写代码的时候,通常自上而下编写,那么希望执行的顺序,理论上也是逐步串行执行,但是为了提高性能,编译器和处理器常常会对指令做重排序。从Java源码到最终实际的指令,需要经过三个阶段的重排序:1)...

    2020-06-07 151

    阅读全文
  • 秒懂,Java 注解 (Annotation)看这一篇就够了

    Java基础 秒懂,Java 注解 (Annotation)看这一篇就够了

    Annotation中文译过来就是注解、标释的意思,在Java中注解是一个很重要的知识点,但经常还是有点让新手不容易理解。我们经常可以看到一些文章对注解的解释如下:Java注解用于为Java代码提供元数据。作为元数据,注解不直接影响你的代码执行,但也有一些类型的注解实际上可以用于这一目的。Ja...

    2020-06-07 103

    阅读全文
  • JAVA集合总结,将知识点一网打尽!

    Java集合与容器 JAVA集合总结,将知识点一网打尽!

    Java集合框架体系总览总的来说,Java集合框架以Collection接口为中心,下属三个重要的子接口,分别是:List(线性表)、Set、Queue(队列),以及还有一个非常重要的Map接口。下面我们分别总结一下每种类型集合下的知识点。一、Collection接口首先我们来看一下Colle...

    2020-04-22 154

    阅读全文
  • 高并发编程之JAVA中的阻塞队列

    Java集合与容器 高并发编程之JAVA中的阻塞队列

    队列是一种访问受限的线性数据结构,它有两个基本操作:在队列尾部加入元素和从队列头部移除元素。在我们日常开发中,经常用来并发操作数据。java中提供了一些应用比较广泛的特殊队列:一种是以ConcurrentLinkedQueue为代表的非阻塞队列;另一种是以BlockingQueue接口为代表的...

    2020-04-21 143

    阅读全文
  • 高并发编程之CopyOnWriteArrayList—源码剖析

    Java集合与容器 高并发编程之CopyOnWriteArrayList—源码剖析

    CopyOnWriteArrayList是J.U.C包下的一个并发容器,它是线程安全且读操作无锁的ArrayList,写操作(增删改)则通过将底层数组拷贝一份,更改操作全部在新数组上进行,是一种读写分离的并发策略,我们也可以称这种容器为"写时复制器",Java并发包中类似的...

    2020-04-20 174

    阅读全文
  • 高并发编程之ConcurrentLinkedQueue和ConcurrentLinkedDeque—源码剖析

    Java集合与容器 高并发编程之ConcurrentLinkedQueue和ConcurrentLinkedDeque—源码剖析

    一、ConcurrentLinkedQueue简介在Java开发个过程中我们不可避免的会使用到一些集合类,比如ArrayList、HashMap等,这些集合类型在多线程环境下使用会有线程安全问题。虽然不同的集合类型都有他的线程安全版本,比如ArrayList不是线程安全的,Vector是线程安...

    2020-04-19 135

    阅读全文
  • 高并发编程之CnocurrentHashMap—源码剖析

    Java集合与容器 高并发编程之CnocurrentHashMap—源码剖析

    面试官:HashMap在多线程环境下存在线程安全问题,那你⼀般都是怎么处理这种情况的?一般在多线程的场景,我都会使用好几种不同的方式去代替:使用Collections.synchorinzedMap构造一个线程安全的HashMap使用Hashtable使用ConcurrentHashMap不过...

    2020-04-19 142

    阅读全文
  • HashMap是如何工作的

    Java集合与容器 HashMap是如何工作的

    一、认识HashMapHashMap最早在jdk1.2就出现了,直到jdk1.7都没有太大的改动:jdk1.7及以前采用的存储结构是采用了数组+链表,jdk1.8的存储结构是数组+链表+红黑树HashMap的底层其实就是一个哈希表,通过哈希表可以实现O(1)的查询效率,HashMap允许存储一...

    2020-04-15 258

    阅读全文
  • 面试常问的几个Java并发工具类你都GET到了吗?

    Java多线程与高并发 面试常问的几个Java并发工具类你都GET到了吗?

    在JDK的并发中提供了几个非常有用的并发工具类:CountDwonLatch、CyclicBarrier、Semaphore。下面我们就一起了解一下这些类的基本使用以及基本原理吧。PS:最起码你得知道它们是干什么用得,下面列出得代码也建议你跑跑。其实如果你理解AQS的设计原理的话,这些工具类的...

    2020-04-13 134

    阅读全文
  • 高并发编程之ReentrantLock—源码剖析

    Java多线程与高并发 高并发编程之ReentrantLock—源码剖析

    一、从Lock接口说起锁时用来控制多个线程范文共享资源,保证资源安全性的一种重要手段。在Lock接口出现以前,Java陈旭是靠synchorinzed关键字实现锁功能点的,在jdk1.5之前使用synchroinzed绝对是一个重量级的操作,因为synchroinzed是依赖对象锁实现的,而对...

    2020-04-12 141

    阅读全文
  • 高并发编程之AQS(AbstractQueuedSynchornizer)—源码剖析

    Java多线程与高并发 高并发编程之AQS(AbstractQueuedSynchornizer)—源码剖析

    AQS概述AQS是AbstractQueuedSynchorinizer的简写,中文名是队列同步器。AQS是Java实现阻塞式锁和同步工具的基石。它使用一个int类型的成员变量state表示同步状态,通过内置的一个FIFO队列完成线程的排队工作。AQS是一个抽象类,主要是通过继承的方式来使用,...

    2020-04-11 256

    阅读全文
  • 高并发编程之线程池ThreadPoolExecutor详解

    Java多线程与高并发 高并发编程之线程池ThreadPoolExecutor详解

    如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务?在Java中可以通过线程池来达到这样的效果。今天我...

    2020-04-09 201

    阅读全文
  • 深入理解Java魔法类Unsafe

    Java多线程与高并发 深入理解Java魔法类Unsafe

    前言​Unsafe为我们提供了访问底层的机制,这种机制仅供java核心类库使用,而不应该被普通用户使用。其实例一般情况是获取不到的,源码中的设计是采用单例模式,不是启动类加载器加载初始化就会抛SecurityException异常。​这个类的提供了一些绕开JVM的更底层功能,基于它的实现可以提...

    2020-04-06 154

    阅读全文
  • 高并发编程之高性能原子类LongAdder—源码剖析

    Java多线程与高并发 高并发编程之高性能原子类LongAdder—源码剖析

    高性能原子类是java8中增加的原子类,它们使用分段的思想(Cell[]),把不同的线程hash到不同的段上去更新,最后再把这些段的值相加得到最终的值,相对Atomic类这些类运行性能更高,这些类主要有:(1)Striped64:下面四个类的父类。(2)LongAccumulator:long...

    2020-04-06 175

    阅读全文
  • 高并发编程之原子类AtomicStampedReference—源码剖析

    Java多线程与高并发 高并发编程之原子类AtomicStampedReference—源码剖析

    AtomicStampedReference是Java提出的一个原子类,它可以解决ABA问题。与这个类有同样作用的类是AtomicMarkableReference,他们都可以解决CAS的ABA问题。一、什么是ABA问题?ABA的危害?ABA问题发生在多线程环境下,说的是当线程A对一个变量使用...

    2020-04-06 222

    阅读全文
  • 高并发编程之原子类AtomicInteger—源码剖析

    Java多线程与高并发 高并发编程之原子类AtomicInteger—源码剖析

    AtomicInteger是java并发包下面提供的原子类,主要操作的是int类型的数值,通过调用底层Unsafe的CAS等方法实现原子操作。源码分析一、主要属性(1)unsafe:Unsafe类的实例(2)value:使用int类型的value存储值,且使用volatile修饰,volati...

    2020-04-06 170

    阅读全文
  • 深入理解CAS无锁机制

    Java多线程与高并发 深入理解CAS无锁机制

    一、什么是CAS?CAS(CompareAndSweap或者CompareAndSet,比较替换),CAS和volatile的读写共同支撑起了整合JUC包。工作原理是:一个CAS操作有三个操作数,目标内存地址V,旧的预期值E和将要替换的新值B,在进行替换操作前比较当且仅当目标内存地址V中的值和...

    2020-04-06 179

    阅读全文
  • 都2020年了你还不理解volatile关键字?

    Java多线程与高并发 都2020年了你还不理解volatile关键字?

    先给出结论:volatile可以保证不同线程对一个变量的可见性,即一个线程修改了被voaltile修饰的变量后,这新值对其他线程来说是立即可见的;volatile可以禁止指令重排序,保证了有序性;volatile不能保证原子性,更加不能保证线程安全,要想保证原子性和线程安全还是乖乖的使用锁吧!...

    2020-04-04 184

    阅读全文
  • 高并发编程之LockSupport深入源码剖析

    Java多线程与高并发 高并发编程之LockSupport深入源码剖析

    与Object的wait()/notify()相比:wait()、notify()、notifyAll()都必须配置Objectmonitor使用,而LockSupport的park()、unpark()方法不必park()、unpark()可以精确到一个线程来阻塞和唤醒它,但是notify(...

    2020-04-03 180

    阅读全文
  • 高并发编程之等待/通知机制

    Java多线程与高并发 高并发编程之等待/通知机制

    一、什么是等待/通知机制?等待/通知机制就是一个【线程A】等待,一个【线程B】通知(线程A可以不用再等待了)。比如生产者和消费者模型,消费者等待生产者生产资源,这是等待,生产者生产好资源通知等待的消费者去消费,这是通知。等待/通知的相关方法是任意Java对象都具备的,因为这些方法被定义在jav...

    2020-04-03 242

    阅读全文
  • 作为Java工程师你真的理解synchronized吗

    Java多线程与高并发 作为Java工程师你真的理解synchronized吗

    造成线程安全问题的诱因主要有两点:存在共享数据(临界区资源)存在多个线程对临界区资源的读写操作因此,为了保证临界区数据的安全,引入了互斥锁的概念,即一个共享数据同时只能被一个线程访问,其他线程需要等待(阻塞),直至当前线程处理完毕释放该锁。synchronized就保证了同一时刻只有一个线程对...

    2020-04-02 259

    阅读全文
  • 面试题:Java中如何停止线程的方法

    Java多线程与高并发 面试题:Java中如何停止线程的方法

    如何停止线程是Java并发面试中的常见问题,这里总结一下。答题思路:停止线程的正确方式是使用中断想停止线程需要停止方,被停止方,被停止方的子方法相互配合扩展到常见的错误停止线程方法:已被废弃的stop/suspend,无法唤醒阻塞线程的volatile标记位方式1、正确的方式:使用interr...

    2020-04-01 222

    阅读全文
  • Thread和Runnable深入源码剖析

    Java多线程与高并发 Thread和Runnable深入源码剖析

    一、Runnable的实现类Thread类本质是Runnable的一个实现类,Runnable从jdk1.0就有了,并且在jdk1.8开始成为了一个函数式接口,这使得我么可以使用lambda简化线程的创建。二、Thread类的构造方法所有构造方法都是调用init()方法来完成对一个线程的初始化...

    2020-03-31 219

    阅读全文
  • 对ThreadLocal的理解?ThreadLocal如何解决内存泄漏问题?

    Java多线程与高并发 对ThreadLocal的理解?ThreadLocal如何解决内存泄漏问题?

    一、ThreadLocal是什么?ThreadLocal是一个本地线程副本变量工具类。ThreadLocal中填充的变量只属于当前线程,与其他线程无关。ThreadLocal为变量在每个线程中都创建了一个副本,每个线程可以访问自己内部的副本变量。ThreadLocal是一个线程的本地变量,也就...

    2020-03-30 252

    阅读全文
  • Java多线程和高并发总结(基础篇)

    Java多线程与高并发 Java多线程和高并发总结(基础篇)

    一、进程的概念?进程可以理解为一个应用程序执行的实例(比如在windows下打开Word就启动了一个进程),进程是资源分配的最小单位,每个进程都有自己独立的地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段、堆栈段和数据段。进程主要有数据、程序和程序控制块(PCB)组成...

    2020-03-29 272

    阅读全文
  • 深入理解JVM—垃圾回收器(Grabage Collector)进阶篇

    JVM 深入理解JVM—垃圾回收器(Grabage Collector)进阶篇

           在上一篇博客深入理解JVM—垃圾回收器(GrabageCollector)基础篇我们了解了Java判定一个对象是否为垃圾的两种算法,以及3种垃圾回收算法。如果说收集算法室是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。接下来我们就一起来了解一下常见的垃圾收集器。1、垃圾...

    2020-02-18 239

    阅读全文
  • 深入理解JVM—垃圾回收器(Grabage Collector)基础篇

    JVM 深入理解JVM—垃圾回收器(Grabage Collector)基础篇

    1、如何判断对象可以被回收1.1引用计数法       给对象添加一个引用计数器,每当有一个地方引用该对象的时候此计数器+1;当一个引用失效后计数器-1,当计数器的值减为0了的对象就不在可能被使用了。优点:实现简单,判定效率高。缺点:当对象之间的相互循环引用时,会导致GC失效,从而造成内存泄漏...

    2020-02-17 258

    阅读全文
  • 深入理解JVM内存结构—堆(Heap)

    JVM 深入理解JVM内存结构—堆(Heap)

    1、堆(Heap)概述Java堆(JavaHeap)是JVM所管理的最大的一块内存空间。Java堆是被所有线程共享的一块内存区域,在JVM启动的时候创建,堆的唯一目的就是存放对象实例的,Java中几乎所有的对象实例和数组都在堆上分配内存,但是随着JIT编译器的发展与逃逸分析技术的成熟,桟上分配...

    2020-02-16 161

    阅读全文
  • 深入理解JVM— Java对象的创建过程、对象内存布局、对象的引用方式详解

    JVM 深入理解JVM— Java对象的创建过程、对象内存布局、对象的引用方式详解

    一、对象的创建过程(1)判断类是否加载。检查常量池中是否可以定位到指定类的符号引用,并且检查这个符号引用所代表的类时候已经被加载、链接和初始化过。如果可以定位到符号引用,并且已经被加载过:进入第2步如果没法定位到符号引用或没有被加载过:执行相应的类加载过程。(2)分配内存。(指针碰撞:Seri...

    2020-02-15 143

    阅读全文
  • 深入理解JVM—字符串常量池StringTable

    JVM 深入理解JVM—字符串常量池StringTable

           首先我们来看一道关于字符串的面试题,请大家先不要直接上机运行,自己先在脑子里运行一下这段程序,如果你可以很清晰的得到所有输出,那么恭喜你!这篇文章你就不要在浪费时间再看了;如果你在某一步还有不清楚的,那么这篇文章将会一网打尽所有你对String常量池的疑虑。运行结果:1、Stri...

    2020-02-14 132

    阅读全文
  • 深入理解JVM—方法区

    JVM 深入理解JVM—方法区

    1、方法区概述       方法区(MethodArea)和Java堆内存一样是线程共享的一块内存区域,它被主要用来存储已经被虚拟机加载的类信息(字段、方法、构造器的字节码)、常量、静态变量、JIT编译后的代码等等(说的再简单直白点就是用来存储每个已经记载的类的结构信息)。       然而方...

    2020-02-13 136

    阅读全文
  • 深入理解JVM—Java虚拟机桟

    JVM 深入理解JVM—Java虚拟机桟

    1、虚拟机桟概述由于跨平台性的设计,JVM的指令架构是基于桟的结构来设计的,这么做的优点:一是具有了跨平台性,其次使得指令集更小,编译器更容易实现,但缺点也很明显:实现同样的功能需要更多的指令和性能下降。栈是运行时的单位,堆是存储的单位栈解决的程序运行问题,即程序如何执行,或者说如何处理数据;...

    2020-02-12 132

    阅读全文
  • 深入理解JVM—程序计数器

    JVM 深入理解JVM—程序计数器

    1、JVM内存模型概述Java虚拟机(JVM)在Java程序运行的过程中,会将它所管理的内存划分为若干个不同的数据区域,这些区域有的随着JVM的启动而创建,有的随着用户线程的启动和结束而建立和销毁。一个基本的JVM运行时内存模型如下所示:图1JVM运行时数据区上图是展示JDK8及以后的虚拟机规...

    2020-02-11 133

    阅读全文
  • 深入理解JVM—虚拟机类加载机制

    JVM 深入理解JVM—虚拟机类加载机制

    1、JVM内存结构概述JVM是Java技术的核心,因为任何Java程序最终都需要运行在JVM上。构成JVM的主要三分部分有:类加载子系统、运行时数据区和执行引擎。他们各自发挥着各自的本领,构建起强大的JVM。JVM的具体组成如下图所示:图1JVM整体结构示意(详)图看完这个图,我想大家对于JV...

    2020-02-10 139

    阅读全文
  • 深入理解JVM—走进Java虚拟机

    JVM 深入理解JVM—走进Java虚拟机

    1、JDK,JRE,JVM之间的关系仅从传统意义上来看,Sun定义的Java技术体系包括:Java程序设计语言、各种平台上的JVM、Class文件格式、JavaAPI类库、来自商业机构和开源社区的第三方Java类库。JDK全程为JavaSEDevelopmentKit(Java开发工具),是用...

    2020-02-10 157

    阅读全文