![](https://img-blog.csdnimg.cn/20190930105610841.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java
文章平均质量分 82
莱宝
技术无尽头,生命却有限,只做有意义的事。
展开
-
Java中ThreadLocal,成员变量和局部变量。
一.成员变量和局部变量1.程序例子:public class HelloThreadTest{ public static void main(String[] args) { HelloThread r = new HelloThread(); Thread t1 = new Thread(r); Thread t2 ...原创 2018-10-18 10:40:32 · 3269 阅读 · 0 评论 -
多线程之六:并发设计模式
整理自炼数成金源码连接:什么是设计模式在软件工程中,设计模式(design pattern)是对软件设计中普遍存在(反复出现)的各种问题 ,所提出的解决方案。架构模式– MVC –分层设计模式–提炼系统中的组件代码模式(成例Idiom)–低层次,与编码直接相关–如DCL不变模式...原创 2018-06-08 08:18:39 · 1078 阅读 · 0 评论 -
多线程之二:java内存模型和线程安全
整理自炼数成金源码连接:1.线程安全是什么:指某个函数、函数库在多线程环境中被调用时,能够正确地处理各个线程的局部变量,使程序功能正确完成。2.内存模型 –每一个线程有一个工作内存和主存独立 –工作内存存放主存中变量的值的拷贝当数据从主内存复制到工作存储时,必须出现两个动作:第一,由主内存执行的读(r...原创 2018-06-08 08:11:03 · 233 阅读 · 0 评论 -
多线程之七:锁优化
整理自炼数成金源码连接:1.锁优化的思路和方法1.1减少锁持有时间 如果需要同步的代码只是其中小部分,最好用同步块代替同步方法,并且尽可能减少同步块里的代码量。1.2减小锁粒度 将大对象,拆成小对象,大大增加并行度,降低锁竞争 偏向锁,轻量级锁成功率提高ConcurrentHa...原创 2018-06-08 08:20:05 · 688 阅读 · 0 评论 -
JVM系列之一:基础
JVM的概念JVM是Java Virtual Machine的简称,意为Java虚拟机。JVM使用软件模拟Java字节码的指令集虚拟机指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统有哪些虚拟机VMWareVisual BoxJVMVMWare或者Visual Box都是使用软件模拟物理CPU的指令集...原创 2018-06-08 14:05:10 · 209 阅读 · 0 评论 -
多线程之八:并发调试和JDK8新特性
整理自炼数成金源码连接:到了这章,多线程的介绍也到尾声了,最后介绍一下多线程在Eclipse中是怎么调试的,还有常见问题的解决方案。多线程调试的方法使用Eclipse进行多线程调试 -条件断点 以上示例断点会中断当前线程,不影响其他线程的继续执行。这种调试方法...原创 2018-06-08 08:21:11 · 3924 阅读 · 0 评论 -
多线程之四:无锁的简单介绍
整理自炼数成金源码连接:1.无锁类的原理详解1.1.CASCAS算法的过程是这样:它包含3个参数CAS(V,E,N)。V表示要更新的变量,E表示预期值,N表示新值。仅当V值等于E值时,才会将V的值设为N,如果V值和E值不同,则说明已经有其他线程做了更新,则当前线程什么 都不做。最后,CAS返回当前V的真实值。CAS操作是抱着乐观的态度进行的,它总是...原创 2018-06-08 08:15:31 · 674 阅读 · 0 评论 -
JVM系列之七:字节码执行
Javap–class文件反汇编工具–javap–verbose Calcjava文件public class Calc {public int calc() {int a = 500;int b = 200;int c = 50;return (a + b) / c;}}编译后Class文件public int calc();C...原创 2018-06-09 14:20:44 · 528 阅读 · 0 评论 -
JVM系列之六:堆分析
内存溢出(OOM)的原因–在JVM中,有哪些内存区间?堆永久区Java栈直接内存–堆溢出[java]view plaincopypublicstaticvoidmain(Stringargs[]){ ArrayList<byte[]>list=newArrayList<byte[]>(); ...原创 2018-06-09 14:20:37 · 358 阅读 · 0 评论 -
JVM系列之五:性能监控工具
工欲善其事,必先利其器。这期我们来介绍常用的性能监控工具,用于性能监控和问题排查。在最后我们再分析一下堆,讲解一下内存溢出的原因。系统性能监控Linux–uptime•系统时间•运行时间n例子中为7分钟•连接数n每一个终端算一个连接•1,5,15分钟内的系统平均负载n运行队列中的平均进程数–Top•第一...原创 2018-06-09 14:20:29 · 300 阅读 · 0 评论 -
JVM系列之三:常用JVM配置参数
GC参数串行收集器–最古老,最稳定–效率高–可能会产生较长的停顿–新生代、老年代使用串行回收–新生代复制算法–老年代标记-压缩–-XX:+UseSerialGC并行收集器–新生代复制算法,老年代标记-压缩–-XX:+UseParNewGC–Serial收集器新生代的并行版本–只会影响新生代–可以和CMS算法一起使...原创 2018-06-09 14:20:12 · 305 阅读 · 0 评论 -
JVM系列之二:GC算法与原理
GC的概念Garbage Collection垃圾收集Java中,GC的对象是堆空间和永久区GC算法引用计数法没有被Java采用引用计数器的实现很简单,对于一个对象A,只要有任何一个对象引用了A,则A的引用计数器就加1,当引用失效时,引用计数器就减1。只要对象A的引用计数器的值为0,则对象A就不可能再被使用。...原创 2018-06-08 14:06:19 · 202 阅读 · 0 评论 -
多线程之五:线程池
整理自炼数成金源码连接:1.线程池的基本使用1.1.为什么需要线程池假设一个服务器完成一项任务所需时间为:T1创建线程时间,T2在线程中执行任务的时间,T3销毁线程时间。如果:T1 + T3远大于T2,则可以采用线程池,以提高服务器性能。1.1.1.假设一个服务器完成一项任务所需时间为:T1创建线程时间,T2在...原创 2018-06-08 08:17:26 · 162 阅读 · 0 评论 -
JVM系列之四:类装载器
class装载验证流程加载–装载类的第一个阶段–取得类的二进制流–转为方法区数据结构–在Java堆中生成对应的java.lang.Class对象链接–验证·目的:保证Class流的格式是正确的·文件格式的验证·是否以0xCAFEBABE开头·版本号是否合理·元数据验证·是否有父类·继承了final类?·非抽象类实...原创 2018-06-09 14:20:21 · 183 阅读 · 0 评论 -
Java静态static工具类线程安全问题研究
针对静态方法有以下一些前提:静态方法和实例方法的区别是静态方法只能引用静态变量,静态方法通过类名来调用,实例方法通过对象实例来调用 每个线程都有自己的线程栈,栈与线程同时创建,每一个虚拟机线程都有自己的程序计数器PC,在任何时刻,一个虚拟机线程只会执行一个方法的代码,这个方法称为该线程的当前方法,如果这个方法不是native的,程序计数器就保存虚拟机正在执行的字节码指令的地址。 线程调用方...原创 2018-09-14 17:00:25 · 1132 阅读 · 0 评论 -
Java类型后面的“...”3个点的含义(可变参数列表)
分析源码时,看到这玩意有三个点。 可变数组参数。用...的话,传参数时可传可不传,传的话,可以是一个个并列地传,也可以直接是一个数组。在方法里取时,filters是一个对象数组,如果调用时什么都没有传,那么filters的长度就是0。传的时候传了几个,filters的长度就是几。还有,1.5以上才支持这个功能。 Filter... filters表示可变对象数组,Filter[...原创 2018-07-08 08:47:47 · 2981 阅读 · 0 评论 -
java中堆栈(stack)和堆(heap)详解
(1)内存分配的策略 按照编译原理的观点,程序运行时的内存分配有三种策略,分别是静态的,栈式的,和堆式的. 静态存储分配是指在编译时就能确定每个数据目标在运行时刻的存储空间需求,因而在编 译时就可以给他们分配固定的内存空间.这种分配策略要求程序代码中不允许有可变数据结构(比如可变数组)的存在,也不允许有嵌套或者递归的结构出现,因为它们都会导致编译程序无法计算准确的存储空间需求. 栈式...原创 2018-06-23 09:43:10 · 3760 阅读 · 0 评论 -
Java 注解小结
在jdk1.5引进了注解的,有许多框架都使用了注解,例如spring,mybatis。 一、JDK内置系统注解: @Override 用于修饰此方法覆盖了父类的方法; @Deprecated 用于修饰已经过时的方法; @Suppvisewarnings 用于通知java编译器禁止特定的编译警告。 注解按照运行机制划分 源码注解:注解只在源码中存在,编译成.class文件就不存...原创 2018-06-14 11:16:27 · 162 阅读 · 0 评论 -
if(list !=null && list.size>0)的双重判断及先后顺序
一、list!=null和list.size()>0的区别1.list==null,意味着list压根没有地址,在堆内就不存在。2.list.size()=0 意思堆内有list但是还没来得及放元素,其长度随着元素数量变化而变化,暂时为零。3.list如果为null的话,说明没有进行初始化。这是list调用任何的方法都会抛出空异常。list.size()==0说明list已经被new过...原创 2018-06-05 09:49:28 · 4104 阅读 · 0 评论 -
Java应届生面试/笔试突击
Java应届生面试突击_章节目录 Java基础 ♦ JVM相关 ♦ Java中的集合类 ♦ 设计模式相关 ♦ Java语言相关 ♦ Java基础专题 多线程和并发 ♦ 多线程和并发专题 ♦ 并发包的问题 ♦ 阻塞队列相关的问题 ♦ 多线程相关的问题 ♦ 其他问题 数据库 ...原创 2018-12-21 16:15:00 · 2906 阅读 · 1 评论 -
IntelliJ IDEA 使用教程
前言:IntelliJ IDEA如果说IntelliJ IDEA是一款现代化智能开发工具的话,Eclipse则称得上是石器时代的东西了。其实笔者也是一枚从Eclipse转IDEA的探索者,随着近期的不断开发实践和调试,逐步体会到这款智能IDE带来的巨大开发便利,在强大的插件功能支持下,诸如对Git和Maven的支持简直让人停不下来,各种代码提示,包括JS更是手到擒来。高级传送门: http...转载 2019-02-22 20:30:20 · 317 阅读 · 0 评论 -
java对象数组的概述和使用
<span style="color:#008080"> 1 <span style="color:#0000ff">public <span style="color:#0000ff">class<span style="color:#000000"> Student<span style="color:#008080"> 2 &l...转载 2018-07-08 08:33:45 · 434 阅读 · 0 评论 -
多线程之一:多线程基础
整理自炼数成金源码连接:一、为什么需要并行:–业务要求–性能–并行计算还出于业务模型的需要并不是为了提高系统性能,而是确实在业务上需要多个执行单元。比如HTTP服务器,为每一个Socket连接新建一个处理线程让不同线程承担不同的业务工作简化任务调度二、几个重要的概念同步(synchronous)和异步(asynchronous):...原创 2018-06-08 08:08:42 · 715 阅读 · 1 评论 -
多线程之三:JDK并发包
整理自炼数成金源码连接:1.各种同步控制工具的使用 1.1.ReentrantLock1.1.1.可重入 单线程可以重复进入,但要重复退出1.1.2.可中断lockInterruptibly()1.1.3.可限时 超时不能获得锁,就返回false,不会永久等待构成死锁1.1...原创 2018-06-08 08:13:02 · 364 阅读 · 0 评论 -
面向接口编程与面向实现编程
四人组的经典名作《设计模式 可复用面向对象软件的基础》,书中提到了可复用面向对象设计的原则,其中的第一个原则是:针对接口编程,而不是针对实现编程问题是在实际的项目开发中我们是怎么体现的呢? 难道就是每一个实现都提供一个接口就了事了?反过来说,你有时候有没有觉得接口是多余的事? 又或者,你仅仅是觉得现在类似spring这样的框架已习惯用接口这种方式而心存当然。 设计模式解析里...原创 2018-06-15 07:57:51 · 1703 阅读 · 0 评论