2 Insane'

尚未进行身份认证

我要认证

暂无相关简介

等级
TA的排名 9w+

尚硅谷JUC#线程池

线程池介绍第四种获取线程的方法:线程池。线程池提供了一个线程队列,队列中保存着所有等待状态的线程。避免了创建与销毁额外开销,提高了响应的速度。通常使用 Executors 工厂方法配置。线程池可以解决两个不同问题:由于减少了每个任务调用的开销,它们通常可以在执行大量异步任务时提供增强的性能,并且还可以提供绑定和管理资源(包括执行任务集时使用的线程)的方法。线程池的体系结构工具类 : Executors为了便于跨大量上下文使用,此类提供了很多可调整的参数和扩展钩子 (hook)。但是,强烈建议程序

2020-09-20 14:27:24

尚硅谷JUC#线程8锁

判断打印的 “one” or “two” ?两个普通同步方法,两个线程,标准打印, 打印结果?新增 Thread.sleep() 给 getOne(),打印结果?新增普通方法 getThree() , 打印结果?两个普通同步方法,两个 Number 对象,打印结果?修改 getOne() 为静态同步方法,打印结果?修改两个方法均为静态同步方法,一个 Number 对象,打印结果?一个静态同步方法,一个非静态同步方法,两个 Number 对象,打印结果?两个静态同步方法,两个 Number

2020-09-15 21:03:53

尚硅谷JUC#ReadWriteLock 读写锁

ReadWriteLock 维护了一对相关的锁,一个用于只读操作, 另一个用于写入操作。只要没有 writer,读取锁可以由多个 reader 线程同时保持。写入锁是独占的。ReadWriteLock 读取操作通常不会改变共享资源,但执行写入操作时,必须独占方式来获取锁。对于读取操作占多数的数据结构。 ReadWriteLock 能提供比独占锁更高的并发性。而对于只读的数据结构,其中包含的不变性 可以完全不需要考虑加锁操作。写写/读写 需要“互斥”读读 不需要互斥public class Tes

2020-09-06 15:53:36

尚硅谷JUC#线程按序交替

要求:编写一个程序,开启 3 个线程,这三个线程的 ID 分别为 A、B、C,每个线程将自己的 ID 在屏幕上打印,要 求输出的结果必须按顺序显示。 如:ABCABCABC…… 或ABBCCCABBCCC…依次递归public class TestABCAlternate { public static void main(String[] args) { AlternateDemo ad = new AlternateDemo(); new Thread(new Runnable()

2020-09-06 15:27:40

尚硅谷JUC#Condition 控制线程通信

Condition 接口描述了可能会与锁有关联的条件变量。这些变量在用 法上与使用 Object.wait 访问的隐式监视器类似,但提供了更强大的功能。需要特别指出的是,单个 Lock 可能与多个 Condition 对象关联。为了避免兼容性问题,Condition 方法的名称与对应的 Object 版本中的不同。在 Condition 对象中,与 wait、notify 和 notifyAll 方法对应的分别是 await、signal 和 signalAll。Condition 实例实质上被绑定到一

2020-09-05 16:21:01

尚硅谷JUC # CountDownLatch(闭锁)

概念CountDownLatch(闭锁)——一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。CountDown(倒数)latch(锁)用给定的计数 初始化 CountDownLatch。由于调用了 countDown() 方法,所以在当前计数到达零之前,await 方法会一直受阻塞。之后,会释放所有等待的线程,await 的所有后续调用都将立即返回。这种现象只出现一次——计数无法被重置。== 一个线程(或者多个), 等待另外N个线程完成某个事情之后才能执行。==闭

2020-09-04 16:31:57

尚硅谷JUC # Lock 同步锁

在 Java 5.0 之前,协调共享对象的访问时可以使用的机制只有 synchronized 和 volatile 。Java 5.0 后增加了一些新的机制但并不是一种替代内置锁的方法,而是当内 置锁不适用时,作为一种可选择的高级功能。ReentrantLock 实现了 Lock 接口,并提供了与 synchronized 相同的互斥性和内存可见性。但相较于 synchronized 提供了更高的处理锁的灵活性。解决多线程安全问题的三种方式jdk 1.5 前:synchronized:隐式锁1.同

2020-09-04 16:27:01

尚硅谷JUC # 实现 Callable 接口

Java 5.0 在 java.util.concurrent 提供了一个新的创建执行线程的方式:Callable 接口。Callable 需要依赖FutureTask ,FutureTask 也可以用作闭锁。创建线程的四种方式无返回:1、实现Runnable接口,重写run();2、继承Thread类,重写run();有返回:3、实现Callable接口,重写call(),利用FutureTask包装Callable,并作为task传入Thread构造函数;4、利用线程池;Callable

2020-09-04 15:12:53

尚硅谷#ConcurrentHashMap 锁分段机制

ConcurrentHashMap 同步容器类是Java 5 增加的一个线程安全的哈希表。对与多线程的操作,介于 HashMap 与 Hashtable 之间。内部采用==“锁分段”==机制替代 Hashtable 的独占锁。进而提高性能。锁粒度减小锁粒度是指缩小锁定对象的范围,从而减小锁冲突的可能性,从而提高系统的并发能力。减小锁粒度是一种削弱多线程锁竞争的有效手段,这种技术典型的应用是 ConcurrentHashMap(高性能的HashMap)类的实现。对于 HashMap 而言,最重要..

2020-08-24 15:21:33

尚硅谷JUC#原子变量与CAS算法

1、原子变量JDK1.5后,java.util.concurrent.atomic 包下提供了一些原子操作的常用类: 类似包装类核心方法:boolean compareAndSet(expectedValue, updateValue)1.1 i++的原子性问题i++的操作实际上分为三个步骤:读-改-写int temp = i;i = i +1;i = temp;public class CASTest { public static void main(String[] args)

2020-08-23 15:47:22

垃圾回收器

1、GC分类与性能指标垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商、不同版本的JVM来实现。由于JDK的版本处于高速迭代过程中,因此Java发展至今已经衍生了众多的GC版本。从不同角度分析垃圾收集器,可以将GC分为不同的类型。分类按线程数分,可以分为串行垃圾回收器和并行垃圾回收器。串行回收指的是在同一时间段内只允许有一个CPU用于执行垃圾回收操作,此时工作线程被暂停,直至垃圾收集工作结束。在诸如单CPU处理器或者较小的应用内存等硬件平台不是特别优越的场合,串行回收器的性能表现可

2020-08-13 15:20:48

垃圾回收相关概念的概述

1、System.gc()的理解在默认情况下,通过System. gc ()或者Runtime . getRuntime() .gc()的调用,会显式触发Full GC,同时对老年代和新生代进行回收,尝试释放被丢弃对象占用的内存。然而System. gc ()调用附带一个 免责声明,无法保证对垃圾收集器的调用(不能确定每次都调用成功)。JVM实现者可以通过System. gc ()调用来决定JVM的GC行为。而一般情况下,垃圾回收应该是自动进行的,无须手动触发,否则就太过于麻烦了。在一些特殊情况

2020-08-07 16:39:04

垃圾回收相关算法

1、标记阶段:引用计数算法2、标记阶段:可达性分析算法3、对象的finalization机制4、MAT与JProfiler的GC Roots溯源5、清除阶段:标记清除算法6、清除阶段:复制算法7、清除阶段:标记-压缩算法8、小结9、分代收集算法10、增量收集算法、分区算法...

2020-08-04 16:51:34

垃圾回收概述

1、什么事垃圾垃圾是指在运行程序中没有任何指针指向的对象,这个对象就是需要被回收的垃圾。如果不及时对内存中的垃圾进行清理,那么,这些垃圾对象所占的内存空间会一直保留到应用程序结束,被保留的空间无法被其他对象使用。甚至可能导致内存溢出。2、为什么需要GC防止内存被消耗完以便JVM将整理出的内存分配给新的对象。随着应用程序所应付的业务越来越庞大、复杂,用户越来越多,没有GC就不能保证应用程序的正常进行。而经常造成STW的GC又跟不上实际的需求,所以才会不断地尝试对GC进行优化。3、早期垃圾

2020-08-03 15:41:53

volatile 关键字

1、Java JUC简介在 Java 5.0 提供了 java.util.concurrent (简称 JUC )包,在此包中增加了在并发编程中很常用 的实用工具类,用于定义类似于线程的自定义子 系统,包括线程池、异步 IO 和轻量级任务框架。 提供可调的、灵活的线程池。还提供了设计用于多线程上下文中的 Collection 实现等。2、volatile 关键字-内存可见性2.1内存可见性Java 内存模型规定,对于多个线程共享的变量,存储在主内存当中,每个线程都有自己独立的工作内存,并且线程只能访

2020-08-03 08:52:54

StringTable

1、String的基本特性String:字符串,使用一对" "引起来表示。String声明为final的, 不可被继承String实现了Serializable接口:表示字符串是支持序列化的。实现了Comparable接口:表示String可以比较大小String在jdk8及以前内部定义了final char[ ] value用于存储字符串数据。jdk9时改为byte [ ]String:代表不可变的字符序列。简称:不可变性。当对字符串重新赋值时,需要重写指定内存区域赋值,不能使用原有的val

2020-07-31 17:40:58

执行引擎

1、执行引擎概述执行引擎内部结构图执行引擎是Java虚拟机核心的组成部分之一。“虚拟机”是-一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面.上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。JVM的主要任务是负责装载字节码到其内部,但字节码并不能够直接运行在操作系统之上,因为字节码指令并非等价于本地机器指令,它内部包含的仅

2020-07-24 13:24:32

对象的实例化、对象的内存布局、对象的访问定位

1、对象的实例化虚拟机遇到一条new指令,首先去检查这个指令的参数能否在Metaspace的常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经被加载、解析和初始化。( 即判断类元信息是否存在)。如果没有,那么在双亲委派模式下,使用当前类加载器以ClassLoader+包名+类名为Key进行查找对应的.class文件。如果没有找到文件,则抛出ClassNotFoundException异常,如果找到,则进行类加载,并生成对应的Class类对象首先计算对象占用空间大小,接着在堆中划分一

2020-07-23 13:22:54

运行时数据区之方法区(元空间)

1、栈、堆、方法区的交互关系1.1运行时数据区结构图从线程共享与否的角度来看1.2栈、堆、方法区的交互关系2、方法区的理解2.1方法区在哪里《Java虚拟机规范》中明确说明:尽管所有的方法区在逻辑上是属于堆的一部分,但一些简单的实现可能不会选择去进行垃圾收集或者进行压缩。但对 于HotSpotJVM而言,方法区还有一个别名叫做Non- Heap (非堆),目的就是要和堆分开。所以,方法区看作是一块独立于Java堆的内存空间。方法区(Method Area)与Java堆一样,是各个线程

2020-07-15 15:03:02

本地方法接口、本地方法库

怎么是本地方法?简单地讲,一个Native Method就 是一个Java调用非Java代码的接口。一个Native Method是这样一个Java方法:该方法的实现由非Java语言实现,比如C。这个特征并非Java所特有,很多其它的编程语言都有这一机制,比如在C++中,你可以用extern “C” 告知C++编译器去调用一个C的函数。如:public native void Native1(int x);没有方法体,因为方法体由其他语言实现。...

2020-07-10 15:59:20

查看更多

勋章 我的勋章
  • 签到新秀
    签到新秀
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 阅读者勋章Lv3
    阅读者勋章Lv3
    授予在CSDN APP累计阅读博文达到30天的你,是你的坚持与努力,使你超越了昨天的自己。
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 1024勋章
    1024勋章
    #1024程序员节#活动勋章,当日发布原创博客即可获得
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。