java
文章平均质量分 53
yingmu3630
这个作者很懒,什么都没留下…
展开
-
ReentrantLock与Condition
多线程和并发性并不是什么新内容,但是 Java 语言设计中的创新之一就是,它是第一个直接把跨平台线程模型和正规的内存模型集成到语言中的主流语言。核心类库包含一个 Thread 类,可以用它来构建、启动和操纵线程,Java 语言包括了跨线程传达并发性约束的构造 —— synchronized 和 volatile 。在简化与平台无关的并发类的开发的同时,它决没有使并发类的编写工作变得更繁琐,只是使它...原创 2017-03-17 14:25:02 · 170 阅读 · 0 评论 -
java 不定长数组
在调用某个方法时,若是方法的参数个数事先无法确定该如何处理?例如System.out.printf()方法中并没有办法事先决定要给的参数个数,像是:?123 System.out.printf("%d",10);System.out.printf("%d %d", 10, 20);System.out.printf("%d %d %d", 10, 20, 30); 在J2S...原创 2015-11-24 15:00:34 · 2784 阅读 · 0 评论 -
Java stack and heap dump
对于大型 java 应用程序来说,再精细的测试都难以堵住所有的漏洞,即便我们在测试阶段进行了大量卓有成效的工作,很多问题还是会在生产环境下暴露出来,并且很难在测试环境中进行重现。JVM 能够记录下问题发生时系统的运行状态并将其存储在转储(dump)文件中,从而为我们分析和诊断问题提供了重要的依据。常见的转储文件包括 Java Dump, Heap dump 和 System dump。这里我们主要...原创 2015-11-14 16:13:40 · 235 阅读 · 1 评论 -
ThreadLocal
ThreadLocal是什么 ThreadLocal是什么呢?其实ThreadLocal并非是一个线程的本地实现版本,它并不是一个Thread,而是thread local variable(线程局部变量)。也许把它命名为ThreadLocalVar更加合适。线程局部变量(ThreadLocal)其实的功用非常简单,就是为每一个使用该变量的线程都提供一个变量值的副本,是每一个线程都可以独立地...原创 2016-07-19 11:10:58 · 81 阅读 · 0 评论 -
java CAS
cas 乐观锁每次不锁定整个线程,在操作之前进行判断。悲观锁独占整个线程,不操作完成也不让别的线程操作。乐观锁用到的机制就是CAS,Compare and Swap。CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做。 避免了加锁编程,利用版本号进行区分。...原创 2016-07-10 14:55:30 · 53 阅读 · 0 评论 -
concurrenthashmap
hash table虽然性能上不如ConcurrentHashMap,但并不能完全被取代,两者的迭代器的一致性不同的,hash table的迭代器是强一致性的,而concurrenthashmap是弱一致的。 ConcurrentHashMap的get,clear,iterator 都是弱一致性的。 Doug Lea 也将这个判断留给用户自己决定是否使用ConcurrentHashMap。Ha...原创 2016-07-10 11:11:51 · 77 阅读 · 0 评论 -
java 线程池的使用
1. 引言合理利用线程池能够带来三个好处。第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。第三:提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。但是要做到合理的利用线程池,必须对其原理了如指掌。2....原创 2016-07-10 09:52:22 · 67 阅读 · 0 评论 -
java.util.concurrent
我们都知道,在JDK1.5之前,Java中要进行业务并发时,通常需要有程序员独立完成代码实现,当然也有一些开源的框架提供了这些功能,但是这些依然没有JDK自带的功能使用起来方便。而当针对高质量Java多线程并发程序设计时,为防止死蹦等现象的出现,比如使用java之前的wait()、notify()和synchronized等,每每需要考虑性能、死锁、公平性、资源管理以及如何避免线程安全性方面带来的...原创 2016-07-03 16:24:07 · 65 阅读 · 0 评论 -
java 内存模型分析(转)
基础数据类型(Value type)直接在栈(stack)空间分配,方法的形式参数,直接在栈空间分配,当方法调用完成后从栈空间回收。引用数据类型,需要用new来创建,既在栈空间分配一个地址空间(reference),又在堆空间分配对象的类变量(object) 。方法的引用参数,在栈空间分配一个地址空间,并指向堆空间的对象区,当方法调用完成后从栈空间回收。局部变量 new 出来时,在栈空间和...原创 2014-10-10 11:56:42 · 61 阅读 · 0 评论 -
Servlet的多线程机制
Servlet的多线程机制 1. 变量的线性安全:这里的变量指字段和共享数据(如表单参数值)。 将参数变量本地化。多线程并不共享局部变量,所以要尽可能地在servlet中使用局部变量。例如:String user=request.getParameter("user"); 使用同步块Synchronized,防止可能异步调用的代码块,这就意味着线程需要排队处理...原创 2015-06-04 16:39:07 · 130 阅读 · 0 评论 -
JVM 配置 以及垃圾收集器的选择
JVM监控的关键指标说明:a) FGC的环比增加次数。Zabbix每2分钟监控一次,如果2分钟之内,FGC增加的次数高于预定阈值,就报警。b) JVM内存使用量。当该值大于阈值的时候,就报警。以上两个值能说明JVM运行的健康情况:如果FGC和JVM内存使用量过多,说明应用内存可能不足(容量不足),就需要扩容或者优化代码。c) 其他参数:ygc的次数,old、perm的使用大小都需要...原创 2016-04-15 12:36:15 · 111 阅读 · 0 评论 -
jvm原理以及调优
垃圾收集基础Java 语言的一大特点就是可以进行自动垃圾回收处理,而无需开发人员过于关注系统资源,例如内存资源的释放情况。自动垃圾收集虽然大大减轻了开发人员的工作量,但是也增加了软件系统的负担。拥有垃圾收集器可以说是 Java 语言与 C++语言的一项显著区别。在 C++语言中,程序员必须小心谨慎地处理每一项内存分配,且内存使用完后必须手工释放曾经占用的内存空间。当内存释放不够完全时,即存...原创 2015-04-20 13:38:34 · 171 阅读 · 0 评论 -
java内存模型
从图中看到,JVM内存分为两个主要区域,一个是所有线程共享的数据区,一个是线程隔离数据区(线程私有) [img]http://dl2.iteye.com/upload/attachment/0107/6926/4b4814ce-2226-3eda-ab6c-bb12427d82b8.jpg[/img]1,程序计数器(Program Counter Register):程序计数器是一...原创 2015-04-18 09:29:40 · 52 阅读 · 0 评论 -
java 注解详解
注解(Annotation)简介Annotation(注解)是JDK5.0 及以后版本引入的一个特性[color=red]。注解是java 的一个新的类型(与接口很相似),它与类、接口、枚举是在同一个层次,它们都称作为java 的一个类型(TYPE)。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。它的作用非常的多,例如:进行编译检查、生成说明文档、代...原创 2015-04-17 17:32:58 · 103 阅读 · 0 评论 -
java 正则表达式
众所周知,在程序开发中,难免会遇到需要匹配、查找、替换、判断字符串的情况发生,而这些情况有时又比较复杂,如果用纯编码方式解决,往往会浪费程序员的时间及精力。因此,学习及使用正则表达式,便成了解决这一矛盾的主要手段。 大 家都知道,正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通的字符(例如字符a到z)以及特殊字符(元字符)组成的文字模式,它 用以描述在查找文字主体时待匹配...原创 2016-12-02 10:28:50 · 73 阅读 · 0 评论 -
java 多线程
Java编写程序都运行在在Java虚拟机(JVM)中,在JVM的内部,程序的多任务是通过线程来实现的。每用java命令启动一个java应用程序,就会启动一个JVM进程。在同一个JVM进程中,有且只有一个进程,就是它自己。在这个JVM环境中,所有程序代码的运行都是以线程来运行。一般常见的Java应用程序都是单线程的。比如,用java命令运行一个最简单的HelloWorld的Java应用程序时,就...原创 2014-11-12 14:17:57 · 68 阅读 · 0 评论 -
java linux监控
http://agapple.iteye.com/blog/1156719https://linux.cn/article-2434-1.html原创 2017-03-13 17:49:53 · 297 阅读 · 0 评论 -
transient和volatile两个关键字
transient和volatile两个关键字一个用于对象序列化,一个用于线程同步,都是Java中比较高阶的话题,简单总结一下。transienttransient是类型修饰符,只能用来修饰字段。在对象序列化的过程中,标记为transient的变量不会被序列化。示例:class Test {transient int a; // 不会被持久化int b;...原创 2017-02-16 09:47:07 · 165 阅读 · 0 评论 -
jvm实时监控工具
:arrow: :arrow: :arrow:原创 2016-04-09 09:35:50 · 237 阅读 · 0 评论 -
哈希 、一致性哈希、余数式哈希
[color=red]什么是Hash[/color] Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消...原创 2016-04-07 16:10:49 · 168 阅读 · 0 评论 -
jvm dump 相关
http://www.cnblogs.com/edwardlauxh/archive/2010/04/25/1918603.htmldump 命令 线程 整个堆 及分析工具集 不管是YGC还是Full GC,GC过程中都会对导致程序运行中中断,正确的选择不同的GC策略,调整JVM、GC的参数,可以极大的减少由于GC工作,而导致的程序运行中断方面的问题,进而适当的提高Java程序的工...原创 2016-03-22 17:22:35 · 71 阅读 · 0 评论 -
深入剖析volatile关键字
深入剖析volatile关键字Java 语言提供了一种稍弱的同步机制,即 volatile 变量.用来确保将变量的更新操作通知到其他线程,保证了新值能立即同步到主内存,以及每次使用前立即从主内存刷新. 当把变量声明为volatile类型后,编译器与运行时都会注意到这个变量是共享的.1.volatile关键字的两层语义 一旦一个共享变量(类的成员变量、类的静态成员变量)被v...原创 2016-03-21 16:02:34 · 52 阅读 · 0 评论 -
java线程安全问题之静态变量、实例变量、局部变量
java多线程编程中,存在很多线程安全问题,至于什么是线程安全呢,给出一个通俗易懂的概念还是蛮难的,如同《java并发编程实践》中所说:写道给线程安全下定义比较困难。存在很多种定义,如:“一个类在可以被多个线程安全调用时就是线程安全的”。 此处不赘述了,首先给出静态变量、实例变量、局部变量在多线程环境下的线程安全问题结论,然后用示例验证,请大家擦亮眼睛,有错必究,否则误人子弟...原创 2016-03-08 12:52:24 · 134 阅读 · 0 评论 -
有状态的bean和无状态的bean的区别
有状态会话bean :每个用户有自己特有的一个实例,在用户的生存期内,bean保持了用户的信息,即“有状态”;一旦用户灭亡(调用结束或实例结束),bean的生命期也告结束。即每个用户最初都会得到一个初始的bean。 无状态会话bean :bean一旦实例化就被加进会话池中,各个用户都可以共用。即使用户已经消亡,bean 的生命期也不一定结束,它可能依然存在于会话池中,供其他用户调用。由于没有特定...原创 2016-03-08 11:23:34 · 69 阅读 · 0 评论 -
java异常处理
前言:java 中的异常处理机制你真的理解了吗?掌握了吗?catch 体里遇到 return 是怎么处理? finally 体遇到 return 怎么办?finally 体里有 System.exit() 方法怎么处理?当 catch 和 finally 体里同时遇上 return 怎么办?相信你在处理异常的时候不是每次都把它 throws 掉就完事了,很多时候异常是需要我们自己来...原创 2014-12-18 11:05:45 · 55 阅读 · 0 评论 -
java 四舍五入相关
java取整和java四舍五入方法import java.math.BigDecimal;import java.text.DecimalFormat;public class TestGetInt{public static void main(String[] args){ double i=2, j=2.1, k=2.5, m=2.9; System...原创 2014-12-17 14:27:08 · 68 阅读 · 0 评论 -
java 类加载与静态块初始化
在这个类第一次被调用或实例化的时候就会被执行(因为此时类开始加载)。 静态代码块只会执行一次,一般会用来初始化一些值,并且在所有对象中全局共享。静态变量,静态方法,静态代码块是在加载类的时候执行的,只发布到tomcat服务器上,但是并没有加载这个类,也不执行,访问这个类的时候才开始加载。[color=red]类加载是为了执行静态方法[/color]在第一次创建一个类的对...原创 2014-12-11 13:04:07 · 169 阅读 · 0 评论 -
Java nio详解
http://www.ibm.com/developerworks/cn/education/java/j-nio/j-nio.html输入/输出:概念性描述I/O 简介I/O ? 或者输入/输出 ? 指的是计算机与外部世界或者一个程序与计算机的其余部分的之间的接口。它对于任何计算机系统都非常关键,因而所有 I/O 的主体实际上是内置在操作系统中的。单独的程序一般是让系统为...原创 2016-01-20 16:30:31 · 70 阅读 · 0 评论 -
simpleDateFormat parse format
format得到String类型的parse得到date类型// 将20120324解析为:2012-03-24 private void parseTime1() { try { String time = "20120324"; SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyM...原创 2014-12-04 11:02:05 · 111 阅读 · 0 评论 -
java 锁机制
一段synchronized的代码被一个线程执行之前,他要先拿到执行这段代码的权限,在Java里边就是拿到某个同步对象的锁(一个对象只有一把锁); 如果这个时候同步对象的锁被其他线程拿走了,他(这个线程)就只能等了(线程阻塞在锁池等待队列中)。 取到锁后,他就开始执行同步代码(被synchronized修饰的代码);线程执行完同步代码后马上就把锁还给同步对象,其他在锁池中等待的某个线程就可以拿到锁...原创 2016-12-09 13:43:04 · 75 阅读 · 0 评论 -
集合之queue研究
队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。在队列这种数据结构中,最先插入的元素将是最先被删除的元素;反之最后插入的元素将是最后被删除的元素,因此队列又称为“先进先出”(FIFO—first in first out)的线性表。[color=...原创 2015-04-17 15:16:21 · 77 阅读 · 0 评论 -
java网络编程总结
一、TCP/IP协议 既然是网络编程,涉及几个系统之间的交互,那么首先要考虑的是如何准确的定位到网络上的一台或几台主机,另一个是如何进行可靠高效的数据传输。这里就要使用到TCP/IP协议。 TCP/IP协议(传输控制协议)由网络层的IP协议和传输层的TCP协议组成。IP层负责网络主机的定位,数据传输的路由,由IP地址可以唯一的确定Internet上的一台主机。TCP层负责面向应...原创 2015-04-17 14:23:00 · 73 阅读 · 0 评论 -
ArrayList深入学习
. ArrayList概述: [color=red]ArrayList是List接口的可变数组的实现。实现了所有可选列表操作,并允许包括 null 在内的所有元素。除了实现 List 接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。 每个ArrayList实例都有一个容量,该容量是指用来存储列表元素的数组的大小。它总是至少等于列表的大小。随着向ArrayList中...原创 2015-01-28 16:17:41 · 100 阅读 · 0 评论 -
HashMap 深入学习
区别: 1 继承类不同: A.HashMap继承AbstractMap B.Hashtable继承Dictionary 2 执行效率不同: A.HashMap是非线程安全的,是Hashtable的轻量级实现,效率较高 B.Hashtable是线程安全的,效率较低 3 put方法对key和value的要求不同...原创 2015-01-28 15:24:11 · 68 阅读 · 0 评论 -
equals与hashcode初探
1.equals()在初学Java的时候,很多人会说在比较对象的时候,==是比较地址,equals()是比较对象的内容,谁说的?看看equals()方法在Object类中的定义:public boolean equals(Object obj){ return (this == obj);}这是比较内容么?明显是比较指针(地址)么...但是为什么会有e...原创 2015-01-28 14:39:06 · 58 阅读 · 0 评论 -
equals与hashcode深入
"哈希表"数据结构 (参考了SUN官方文档以及无数的网上资料做出的个人总结) 在集合框架中 HashSet Hashtable HashMap 都使用了哈希表的形式来存储数据;保证数据唯一的方法;hashCode() & equals(); 关于hashCode: 初学者可以粗略的将 hashCode 的值理解为内存地址值,但这不是绝对物理地址,它是经过哈希算法转成的 int 值;...原创 2015-01-28 11:28:37 · 76 阅读 · 0 评论 -
java serialVersionUID的作用
erialVersionUID 用来表明类的不同版本间的兼容性简单来说,Java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的。在进行反序列化时,JVM会把传来 的字节流中的serialVersionUID与本地相应实体(类)的serialVersionUID进行比较,如果相同就认为是一致的,可以进行反序 列化,否则就会出现序列化版本不一致的异常。...原创 2015-01-26 14:35:12 · 71 阅读 · 0 评论 -
java 序列化
Java序列化是指把Java对象转换为字节序列的过程;而Java反序列化是指把字节序列恢复为Java对象的过程。[color=red]为什么需要序列化与反序列化[/color] 我们知道,当两个进程进行远程通信时,可以相互发送各种类型的数据,包括文本、图片、音频、视频等, 而这些数据都会以二进制序列的形式在网络上传送。那么当两个Java进程进行通信时,能否实现进程间的对象传送呢?答案是...原创 2015-01-26 13:19:33 · 55 阅读 · 0 评论 -
DecimalFormat 格式化数字
DecimalFormat 是 NumberFormat 的一个具体子类,用于格式化十进制数字。DecimalFormat 包含一个模式 和一组符号 符号含义: 0 一个数字 # 一个数字,小数点后最后一位不包括 0 . 小数的分隔符的占位符 , 分组分隔符的占位符 ; 分隔格式。 - 缺省负数前缀。 % 乘以 100 和作为百分比显示 ? 乘以...原创 2015-01-12 14:55:26 · 203 阅读 · 0 评论 -
java io流
Java 流在处理上分为字符流和字节流。字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符、字符数组或字符串,而字节流处理单元为 1 个字节,操作字节和字节数组。 [color=red]当读不到数据时方法就返回-1[/color]注: 每次以1024字节或其他指定数读取文件 然后转换成String类型,可能会有乱码问题( 一 )以字节为导向的 stream--...原创 2015-01-08 11:54:42 · 50 阅读 · 0 评论