wangxiaoming
博客是很好的总结和记录工具,如果有问题,来不及回复,关注程序员奇点,获取我的联系方式,向我提问,也可以给我发送邮件,联系 1275801617@qq.com
展开
-
【深入理解Java原理】线程基本概念
Java 并发 --线程基本概念线程的基本概念线程是条单独的执行流,有自己的栈,和程序技术器一般创建线程的方法有:继承Thread 实现Runnable 实现Callable线程的基本属性和方法1. id和nameid是一个自增的id,每新建一个线程就+1 private static synchronized long nextThreadID() ...原创 2019-07-25 11:36:45 · 337 阅读 · 0 评论 -
【深入理解Java并发原理】Thread.yield、Thread.sleep、Object.wait、 LockSupport.park 对比
Thread.yield、Thread.sleep、Object.wait、 LockSupport.park 对比sleep、wait、park区别Thread.sleep() 不会释放占有的锁,Object.wait() 会释放会占有的锁Thread.sleep() 必须传入时间,Object.wait() 可以传可不传,不传会一直阻塞下去。Thread.sleep() 会自动唤醒,然后继续执行。Object.wait() 不带时间方法,需要 Object.notify() 唤醒Obje原创 2020-06-08 23:41:41 · 788 阅读 · 0 评论 -
【深入理解Java原理】Synchronized原理
多线程共享内存,需要解决两个问题:竞态条件 内存可见性可以使用Synchronized 解决上面的问题从几个方面来理解synchronized可重入性 内存可见性 死锁可重入性是synchronized 一个特点,原理如下:可重入锁是记录锁的持有线程,和持有数量来实现的,当被synchronized 保护的代码时 ,检查对象是否已经被锁,如果是,那么检查是否被当前...原创 2019-07-25 10:23:33 · 1452 阅读 · 2 评论 -
【深入理解 Java原理】Condition 实现原理
Condition 实现原理说 Codition 前,需要说下 ConditioObject。ConditionObject 是同步器 AbstractQueuedSynchronzied 的内部类,因为 Condition 的操作需要关联的锁。 ArrayBlockingQueue 就是 Condition 的具体应用。 Object 中其实 也有 wait ,notify ,notifyAll 等操作, Condition 相当于将 wait ,notify ,notifyAll 转换成想要的对原创 2020-06-01 12:08:06 · 1036 阅读 · 0 评论 -
【深入理解Java原理】AtomicInteger 底层实现原理是什么? 如何在自己代码中应用 CAS 操作?
AtomicInteger 底层实现原理是什么? 如何在自己代码中应用 CAS 操作AtomicInteger 是对 int 类型的一个封装,提供原子性的访问和更新操作,其原子性的操作实现是基于 CAS (compare-and-swap)技术。https://en.wikipedia.org/wiki/Compare-and-swapCAS,表征的是一些列操作的集合,获取当前数值,进行一些运算,利用 CAS 指令试图进行更新,如果当前数值不变,代码没有其他线程进行并发修改,则成功更新。否则,可能原创 2020-05-11 19:02:28 · 644 阅读 · 1 评论 -
【深入理解Java原理】如何保证容器是线程安全的? ConcurrentHashMap 如何高效的线程安全?
如何保证容器是线程安全的? ConcurrentHashMap 如何高效的线程安全?Java提供了不同层面的线程安全支持。在传统集合框架内部,除了 Hashtable等同步容器,还提供了所谓的同步包装器(Synchronized Wrapper),我们可以调用Collections工具类提供的包装方法,来获取一个同步的包装容器(如 Collections.synchronizedMap),但是它们都是利用非常粗粒度的同步方式,在高并发情况下,性能比较低下。其实可以利用并发包提供的线程安全容器。各种并发原创 2020-05-10 14:23:38 · 470 阅读 · 0 评论 -
【深入理解Java原理】线程池原理
合理的使用线程池有几个好处第一: 降低资源消耗,通过线程的重复利用,可以降低 线程创建和销毁的消耗第二:提高响应速度,任务来时,不用新建线程就能执行第三: 能够进行线程的管理,线程不能无限制的创建,是稀缺资源。线程池原理?1. 判断当前工作线程的个数是否大于核心线程数目,如果不是,那么就新建一个线程来执行任务,如果是,则进入2流程2.线程池判断工作线程已经到达核...原创 2019-07-25 10:21:31 · 221 阅读 · 0 评论 -
【深入理解Java原理】 InheritableThreadLocal
ThreadLocal与InheritableThreadLocal 的理解ThreadLocal 的类图结构 ThreadLocalMap是一个定制化的HashMap,默认每个线程中的两个变量threadlocals和inhe...原创 2019-07-25 11:44:15 · 291 阅读 · 0 评论 -
【深入理解Java原理】并发编程
并发编程乐观锁理论: 冲突检测和数据更新,CAS 理论:compare and set相对于synchronized 这种阻塞方式,CAS采用的是非阻塞算法,可以很大提升性能包含三个操作数 :内存值V 预期值A,新值B查看内存位置V是否与预期值A一致,如果是更新为B, 如果不匹配,不做任何操作CAS理论存在ABA 问题:ABA问题: ...原创 2019-07-25 10:28:12 · 294 阅读 · 0 评论 -
谈谈反射机制,动态代理基于什么原理
谈谈反射机制,动态代理基于什么原理Java 反射机制?反射机制是Java语言提供的一种基础功能,赋予程序在运行时自省(introspect,官方用语)的能力。通过反射我们可以直接操作类或者对象,比如获取某个对象的类定义,获取类声明的属性和方法,调用方法或者构造对象,甚至可以运行时修改类定义。https://docs.oracle.com/javase/tutorial/reflect/in...原创 2020-05-03 11:30:58 · 357 阅读 · 0 评论 -
synchronized 和 ReentrantLock 有什么区别?
synchronized 和 ReentrantLock 有什么区别?synchronized 最慢,这话靠谱么?Synchronized 是 Java 内建的同步机制,所以也有人称其为 Intrinsic Locking,它提供了互斥的语义和可见性,当一个线程已经获取当前锁时,其他试图获取的线程只能等待或者阻塞。Java 5 之前,synchronized 是仅有的同步手段,在代码中,S...原创 2020-05-07 20:37:13 · 370 阅读 · 0 评论 -
synchronized 底层如何实现?什么是锁升级、降级?
synchronized 底层如何实现?什么是锁升级、降级?synchronized 代码块是由一对 monitorenter/monitorexit 指令实现的,Monitor 对象是同步的基本实现单元。https://docs.oracle.com/javase/specs/jls/se10/html/jls-8.html#d5e13622在Java6之前, Monitor的实现完全...原创 2020-05-06 21:49:59 · 452 阅读 · 0 评论 -
Java 并发包提供了哪些并发工具类
Java 并发包提供了哪些并发工具类Java 基础并发工具类提供了比 synchronized更加高级的各种同步结构,包括 CountDownLatch, CyclicBarrier、 Semaphore等,可以实现更加丰富的多线程操作,比如利用 Semaphore作为资源各种线程安全的容器,比如最常见的 ConcurrentHashMap、有序的 ConcunrrentskipListM...原创 2020-05-04 17:18:46 · 427 阅读 · 0 评论 -
一个线程两次调用 start 会出现什么情况?
一个线程两次调用 start 会出现什么情况?一个线程两次调用 start()方法会出现什么情况?谈谈线程的生命周期和状态转移。在第二次调用 start() 方法的时候,线程可能处于终止或者其他(非NEW)状态,但是不论如何,都是不可以再次启动的。调用两次 start ?Java的线程是不允许启动两次的,第二次调用必然会抛岀 IllegalThreadStateEXception,这是一种...原创 2020-05-02 11:55:05 · 771 阅读 · 0 评论 -
设计模式 -- 单例模式
设计模式 -- 单例模式什么是单例模式? 单例模式是一种对象创建模式, 使用单例模式,可以保证为一个类只生产一个实例对象,也就是说,整个程序空间,只有该类的一个实例对象。为什么需要使用单例模式? 在应用系统开发中,我们常常有以下需求: - 在多个线程之间,比如servlet环境,共享同一个资源或者操作同一个对象原创 2020-05-01 11:41:35 · 148 阅读 · 0 评论 -
GCview 工具使用
前提:收集线上GC日志配置参数: -verbose:gc -Xloggc:gc.log1、Git地址:https://github.com/chewiebug/GCViewer/releases2、下载jar包gcviewer-1.353、java -jar gcviewer-1.36.jar PrismTransporterGC.log图中整个高度为J...原创 2020-04-03 13:47:06 · 1793 阅读 · 0 评论 -
类加载机制--双亲委派
类加载机制--双亲委派 BootsTrap ------ %JAVAHOME%/lib下面的jar | | Extension ------%JAVAHOME%/lib/ext 路径下的jar | | Application ------CLASSPATH 路径下指定...原创 2019-11-22 17:59:18 · 196 阅读 · 0 评论 -
Instrumentation 介绍与使用
使用 Insrumentation ,开发者而言构建一个独立于应用程序的代理程序(Agent),检车和协助运行在JVM 上的程序,甚至可以替换和修改某些类的定义。简单的来说 开发者使用Instrumentation 可以实现一种虚拟机级别的AOP实现。Instrumentation 的最大作用,就是类定义动态改变和操作。 程序运行时,通过 -javaagent 参数指定一个特定的 ...原创 2019-09-22 23:22:47 · 10271 阅读 · 0 评论 -
JVM 问题排查总结
JVM 问题排查关注左边二维码:程序员开发者社区 1. Full GC次数过多 2. CPU过高 3. 不定期出现的接口耗时现象 4. 某个线程进入WAITING状态 5. 死锁 6.内存泄露 处理过线上问题的同学基本上都会遇到系统...原创 2019-09-16 10:54:02 · 361 阅读 · 0 评论 -
模拟spring用配置文件的方式创建对象
模拟spring用配置文件的方式创建对象看代码:定义一个接口:package designfactory;public interface Moveable { //有一个run方法 void run();}两个实现类,实现接口:package designfactory;public class Train ...原创 2019-08-22 15:16:28 · 852 阅读 · 0 评论 -
Java 操作MongoDB 基本操作 -更新
Java 操作MongoDB 基本操作需要下载驱动,并且依赖不多说:看代码:package com.payment;import java.net.InetAddress;import java.net.UnknownHostException;import org.bson.Document;import com.mongodb.MongoC...原创 2019-08-22 15:16:09 · 643 阅读 · 0 评论 -
去掉List中重复元素
去掉List中重复元素看测试代码:/** * 版权所有 (c) 2016,xiaoming有限公司 */package ToolTest;import java.util.ArrayList;import java.util.HashSet;import java.util.List;/** * 类说明:...原创 2019-08-22 15:09:15 · 880 阅读 · 0 评论 -
Java 连接MYSQL基本操作 查询更新
Java 连接MYSQL基本操作 查询更新依赖包 下载:地址看下表结构:看代码:查询package com.payment;import java.sql.*;public class SelectTable { public static void main(String[] args){ try{ ...原创 2019-08-22 15:08:51 · 808 阅读 · 0 评论 -
【深入理解Java原理】ThreadLocal
ThreadLocal 使用莫问行人早, 更有早行人-- 古训《增广贤文》ThreadLocal 线程调用, 每个线程调用全局ThreadLocal 对象的set方法, 相当于往其内部的map 中增加一条记录,key 分别是各自的线程,value 是各自的set方法传进去的值, 在线程结束时可以调用Threadlocal.clear()方法,这样会更快的释放内存,不调用也可以,线程结...原创 2019-07-25 11:37:53 · 931 阅读 · 0 评论 -
【深入理解Java原理】AQS(AbstractQueuedSynchronizer)
Java并发 -AQSAQS 是啥?AQS的全称为(AbstractQueuedSynchronizer) 即队列同步器。它是构建锁及其他同步组件的基础框架(如 ReetrantLock, ReetrantReadWriteLock,Semaphore等)AQS 提供了哪些方法?...原创 2019-07-26 11:23:17 · 489 阅读 · 0 评论 -
【深入理解Java原理】 线程
线程的生命周期新建状态(New)使用了new 关键字创建了一个线程,JVM 为其分配内存,并初始化成员变量就绪状态(Runnable)可运行态,线程对象调用了start方法,JVM为其创建调用栈和程序计数器,等待调度运行。运行状态(Running)如果处于就绪状态的线程获得了CPU,开始执行run()方法体中的内容,阻塞状态(Blocked)时间阻塞(wait)...原创 2019-07-12 19:07:34 · 147 阅读 · 0 评论 -
【深入理解Java 中的锁】- 公平锁非公平锁实现原理
Java 中的锁与同步Java 对象:长度 内容 说明 32/64bit Mark Word 存储对象的hashCode或锁信息等 32/64bit Class Metadata Address 存储到对象类型数据的指针 32/64bit Array length 数组的长度(如果当前对象是数组) MarkW...原创 2019-07-12 19:00:31 · 546 阅读 · 0 评论 -
Java 多线程学习笔记 线程通讯 wait notify notifyAll的理解
Java 多线程学习笔记 线程通讯 wait notify notifyAll的理解wait()、 notify()、 notifyAll()是Object类的实例方法,是多线程之间通信的手段2. wait():当某个条件无法满足,当前线程又没有能力解决时,等待直到条件满足3. notify():当前线程认为其它线程所等待的条件已经满足时,通知某个正在等待的线程4. notify...原创 2019-08-22 15:08:38 · 501 阅读 · 0 评论 -
Java 反射将配置文件数据加载到对象属性中Reflect与Properties使用
Java 反射将配置文件数据加载到对象属性中Reflect与Properties使用Java 反射 可以根据类名找到相应的类,也可以将配置文件中的值加载到对应属性中。需要用到的包:spring-core-3.1.2.Release.jarJava 反射的一种应用:import java.io.File;import java.io.IOException;i...原创 2019-08-06 14:34:27 · 877 阅读 · 0 评论 -
Java虚拟机类加载机制与Thread yield join()方法使用
Java虚拟机类加载机制Java 类加载过程有7个步骤: 加载(Loading) ,验证(Verfication), 准备(Preparation),解析(Resolution),初始化(Initialization) ,使用(Using),卸载(Unloading)。 每个步骤干那些事情,如下:...原创 2019-08-06 11:35:37 · 238 阅读 · 0 评论 -
Java 获取Resource目录下的文件 解决办法
Java 获取Resource目录下的文件工程结构: 有两种方式:Java代码中的类,要获取Resource资源文件目录下文件绝对路径寻址String s1 = this.getClass().getResource("/test.pxml").getPath(); 注意这个 / 址的是根目录,用绝对路径,可能会出现的问题是,你的...原创 2019-08-08 10:33:05 · 24168 阅读 · 0 评论 -
getSupperClass()和getGenericSuperclass()的区别
getSuperclass 返回直接继承的父类(由于编译擦除,没有显示泛型参数)getGenericSuperclass 返回直接继承的父类(包含泛型参数)package cpcn.payment.shwealthbank401.api.domain;import java.lang.reflect.InvocationTargetException;import...原创 2019-08-05 14:13:44 · 728 阅读 · 0 评论 -
多线程学习笔记 线程基础
最近有培训,老大培训的很辛苦,都是花了很多时间整理的,拿出来和大家共享一下吧!线程概念: 1.每个进程至少有一个线程, 2. 是操作系统任务调度的基本单位 3. 同一个进程的多个线程共享IO,内存资源 4. 现代计算机支持多个线程的并发执行 5. 线程是有状态的盗用一下一博客点击打开链接的图:原创 2016-11-28 21:19:45 · 1160 阅读 · 0 评论