
JAVA语言
文章平均质量分 80
马万明
一生的努力奋斗
一生的幸福充实
展开
-
java 线程池
一、简介线程池类为 java.util.concurrent.ThreadPoolExecutor,常用构造方法为:ThreadPoolExecutor(int corePoolSize, int maximumPoolSize,long keepAliveTime, TimeUnit unit,BlockingQueue workQueue,Rejecte原创 2017-10-17 19:21:15 · 680 阅读 · 0 评论 -
双向队列集合 Deque
Queue除了前面介绍的实现外,还有一种双向的Queue实现Deque。这种队列允许在队列头和尾部进行入队出队操作,因此在功能上比Queue显然要更复杂。下图描述的是Deque的完整体系图。需要说明的是LinkedList也已经加入了Deque的一部分(LinkedList是从jdk1.2 开始就存在数据结构)。 Deque在Queue的基础上增加了更多的操作方法。转载 2016-08-22 15:12:47 · 2877 阅读 · 0 评论 -
JAVA设计模式-模板模式
《JAVA与模式》之模板方法模式在阎宏博士的《JAVA与模式》一书中开头是这样描述模板方法(Template Method)模式的: 模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。模转载 2016-08-10 15:54:40 · 313 阅读 · 0 评论 -
java.util.Stack类简介
Stack是一个后进先出(last in first out,LIFO)的堆栈,在Vector类的基础上扩展5个方法而来Deque(双端队列)比起Stack具有更好的完整性和一致性,应该被优先使用[plain] view plain copyE push(E item) 把项压入堆栈顶部。 E pop转载 2016-08-22 14:54:41 · 353 阅读 · 0 评论 -
JAVA集合类图
1.java集合类图1.11.2 上述类图中,实线边框的是实现类,比如ArrayList,LinkedList,HashMap等,折线边框的是抽象类,比如AbstractCollection,AbstractList,AbstractMap等,而点线边框的是接口,比如Collection,Iterator,List等。 发现一个特点,上述所有的集转载 2016-08-22 14:19:26 · 470 阅读 · 0 评论 -
深入理解JVM类加载过程
虚拟机类加载机制 生命周期从被加载到虚拟机内存,到卸载内存为止,包含7个阶段:加载 、验证、解析、 准备、初始化、使用、卸载。 验证、准备和解析统称为连接。 加载、验证、准备、初始化和卸载这5个阶段的顺序是确定的,而解析则不一定,它可以在初始化阶段之后再开始,以支持java的运行时绑定。2. 3种情况必须对类进行“初始化”遇到ne转载 2016-08-22 13:27:42 · 360 阅读 · 0 评论 -
Java中Error与Exception的区别
Error类和Exception类都继承自Throwable类。Error的继承关系:Exception的继承关系:二者的不同之处:Exception:1.可以是可被控制(checked) 或不可控制的(unchecked)。2.表示一个由程序员导致的错误。3.应该在应用程序级被处理。Error:1.总是不可控转载 2016-08-22 09:08:09 · 289 阅读 · 0 评论 -
java源注解
java注解java中元注解有四个: @Retention @Target @Document @Inherited; @Retention:注解的保留位置 @Retention(RetentionPolicy.SOURCE) //注解仅存在于源码中,在class字节码文件中不包含 @Retention(Rete转载 2016-08-10 09:42:28 · 436 阅读 · 0 评论 -
servlet开发
一、Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术。 Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完成以下2个步骤: 1、编写一个Java类,实现servlet接口。 2、把开发好的Java类部署到web服务器中。 按照一种约定俗成的称呼习惯转载 2016-08-10 09:04:53 · 358 阅读 · 0 评论 -
jar包详解和META-INF作用(转)
jar包详解和META-INF作用(转)如果我们使用 JDK 的 jar 命令把它打成 JAR 文件包 test.jar,则这个 JAR 文件的内部目录结构为: 不要删掉,是证书,和校验数据,是部署信息。很多信息是存放类信息的文件夹,信息包, 用来描述该jar文件的信息的,程序的入口test.jar |-- META-INF | `-- MANIFEST.M转载 2016-08-09 09:49:39 · 2294 阅读 · 0 评论 -
java instrument agent
利用 Java 代码,即 java.lang.instrument 做动态 Instrumentation 是 Java SE 5 的新特性,它把 Java 的 instrument 功能从本地代码中解放出来,使之可以用 Java 代码的方式解决问题。使用 Instrumentation,开发者可以构建一个独立于应用程序的代理程序(Agent),用来监测和协助运行在 JVM 上的程序,甚至能够替换转载 2016-08-09 09:17:06 · 1850 阅读 · 0 评论 -
jstat 命令行详解
参见:http://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jstat.html转载 2016-08-17 09:18:59 · 770 阅读 · 0 评论 -
Java堆内存富余却疯狂FullGc问题排查
刚上线了一个新的应用集群,第二天和第三天收到了应用FullGc超过阈值的报警短信。但是观察报警Java实例的jvm监控,堆内存仅仅用了1G多一点,还富余近700M。很困惑,剩余这么多内存没被使用,那么说明老年代内存是充足的才对啊! 同事提醒我是不是申请了什么大对象,诚然,老年代只会有两种类型的对象,1,多次Minor Gc中存活的小对象,2,大对象,即超过了PretenureSize转载 2016-08-17 09:18:13 · 2659 阅读 · 1 评论 -
使用Lock来实现生产者和消费者问题
现在用Lock来实现它 1 package com.thread; 2 3 import java.util.LinkedList; 4 import java.util.concurrent.locks.Condition; 5 import java.util.concurrent.locks.Lock; 6 import java.util.concu转载 2016-07-22 11:24:10 · 439 阅读 · 0 评论 -
Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
Java并发编程:CountDownLatch、CyclicBarrier和Semaphore 在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下这三个辅助类的用法。 以下是本文目录大纲: 一.CountDownLatch用法 二.Cy转载 2016-07-22 09:02:32 · 336 阅读 · 0 评论 -
LDAP学习资料整理
转自http://blog.youkuaiyun.com/arhaiyun/article/details/8937468LDAP中的objectClass与Attribute初学LDAP时容易弄错的问题就是objectClass和Attribute之间的关系的,当时找过许多的中文资料都没有得到答案。最近终于彻底弄明白了这个问题,于是决定做个笔记。下面我会对照Java里面的一些概念来讲讲L转载 2016-08-01 18:52:14 · 1537 阅读 · 0 评论 -
java中各种Queue
在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景。认识BlockingQueue阻塞队列,顾名思义,首先它是一个队列,而一个队列在数据结构中所起转载 2016-09-13 08:18:25 · 7888 阅读 · 0 评论 -
Java中Class类与反射机制的用法总结
Java中Class类与反射机制的用法总结Java的Class类是java反射机制的基础,通过Class类我们可以获得关于一个类的相关信息,下面我们来了解一下有关java中Class类的相关知识!首先,Class是一个java类,跟Java API中定义的诸如Thread、Integer类、我们自己定义的类是一样,也继承了Object(Class是Object的直接子类)。总之转载 2016-08-23 09:17:41 · 1633 阅读 · 0 评论 -
Java 内部类与静态类
内部类1:内部类拥有普通类的所有特性,也拥有类成员变量的特性2:内部类可以访问其外部类的成员变量,属性,方法,其它内部类静态类1:只有内部类才能声明为static,也可以说是静态内部类2:只有静态内部类才能拥有静态成员,普通内部类只能定义普通成员3:静态类跟静态方法一样,只能访问其外部类的静态成员4:如果在外部类的静态方法中访问内部类,这时候转载 2016-09-02 14:41:57 · 571 阅读 · 0 评论 -
RSA前端加密后端解密
通过强大的开源工具类,我们可以实现前端公钥加密,后端私钥解密,非对称加密方式相对比较安全。通过强大的开源工具类,我们可以实现前端公钥加密,后端私钥解密,非对称加密方式相对比较安全。1. 准备工作下载jar包 https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk16 加密解密工具类,引用到该包网上下载三个js文件 2.开始具体工作前端页面加密,rsaPublicKey是后端写的一个action原创 2016-12-16 16:01:47 · 9599 阅读 · 3 评论 -
OSGI基本原理
定义OSGi(Open Service Gateway Initiative)技术是面向Java的动态模型系统。这个框架实现了一个优雅、完整和动态地组价模型。应用程序(称为bundle)无序重新引导可以被远程安装、启动、升级和卸载。OSGi服务平台提供在多种网络设备上无需重启的动态改变构造的功能。为了最小化耦合度和促使这些转载 2016-09-08 08:38:51 · 5975 阅读 · 0 评论 -
java的(PO,VO,TO,BO,DAO,POJO)解释
PO(persistant object) 持久对象 在o/r映射的时候出现的概念,如果没有o/r映射,没有这个概念存在了。通常对应数据模型(数据库),本身还有部分业务逻辑的处理。可以看成是与数据库中的表相映射的java对象。最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合。PO中应该不包含任何对数据库的操作。 VO(value object) 值对象转载 2016-09-07 10:53:39 · 504 阅读 · 0 评论 -
Java单例模式之双重检锁-优
单例创建模式是一个通用的编程习语。和多线程一起使用时,必需使用某种类型的同步。在努力创建更有效的代码时,Java 程序员们创建了双重检查锁定习语,将其和单例创建模式一起使用,从而限制同步代码量。然而,由于一些不太常见的 Java 内存模型细节的原因,并不能保证这个双重检查锁定习语有效。它偶尔会失败,而不是总失败。此外,它失败的原因并不明显,还包含 Java 内存模型的一些隐秘细节。这些转载 2016-09-07 10:45:35 · 1161 阅读 · 0 评论 -
javaBean对象与Map对象互转
import java.beans.BeanInfo;import java.beans.IntrospectionException;import java.beans.Introspector;import java.beans.PropertyDescriptor;import java.lang.reflect.InvocationTargetException;imp转载 2016-09-07 08:38:57 · 1083 阅读 · 0 评论 -
线程池之Future
线程池任务执行结果这一节来探讨下线程池中任务执行的结果以及如何阻塞线程、取消任务等等。1 package info.imxylz.study.concurrency.future;2 3 public class SleepForResultDemo implements Runnable {4 5 static boolean result = f转载 2016-08-26 10:17:04 · 2299 阅读 · 0 评论 -
Java 之EnumSet与EnumMap
Java 之EnumSet与EnumMapEnumSet是Java枚举类型的泛型容器,Java既然有了SortedSet、TreeSet、HashSet等容器,为何还要多一个EnumSet呢?答案肯定是EnumSet有一定的特性,举个例子,EnumSet的速度很快。其他特性就不一一列举了,毕竟本文的内容不是介绍EnumSet的特性。 首先以事实说话,存在这样一个EnumSet,它有50个转载 2016-09-05 10:54:46 · 2526 阅读 · 0 评论 -
双端队列Deque
Queue除了前面介绍的实现外,还有一种双向的Queue实现Deque。这种队列允许在队列头和尾部进行入队出队操作,因此在功能上比Queue显然要更复杂。下图描述的是Deque的完整体系图。需要说明的是LinkedList也已经加入了Deque的一部分(LinkedList是从jdk1.2 开始就存在数据结构)。 Deque在Queue的基础上增加了更多的操作方法。转载 2016-08-25 15:40:33 · 696 阅读 · 0 评论 -
AbstractQueuedSynchronizer/AQS 使用拓展分析-优
java.util.concurrent.locks.AbstractQueuedSynchronizer是J.U.C里最核心,也是最复杂的一个基础的类,简称AQS。AbstractQueuedSynchronizer是CountDownLatch/FutureTask/ReentrantLock/RenntrantReadWriteLock/Semaphore的基础,因此AbstractQueu原创 2016-08-25 15:27:10 · 1349 阅读 · 0 评论 -
组合模式
组合模式定义:组合模式允许你将对象组合成树形结构来表现“整体/局部”层次结构,组合能让客户以一致的方式处理个别对象以及对象组合。当涉及到如:菜单,子菜单之类的问题时,会自然而然的想到使用树形结构类之间的关系确如上图所示,但是这种设计复用性和扩展性都很低:1,所有的菜单都有各自的add、remove以及getChild实现,复用性很低2,类型转换问题,菜单转载 2016-08-25 10:40:45 · 417 阅读 · 0 评论 -
java信号量Semaphore介绍
Semaphore当前在多线程环境下被扩放使用,操作系统的信号量是个很重要的概念,在进程控制方面都有应用。Java 并发库 的Semaphore 可以很轻松完成信号量控制,Semaphore可以控制某个资源可被同时访问的个数,通过 acquire() 获取一个许可,如果没有就等待,而release() 释放一个许可。比如在Windows下可以设置共享文件的最大客户端访问个数。 Semaph转载 2016-08-25 10:02:45 · 319 阅读 · 0 评论 -
JAVA线程间通信-优
线程通信的目标是使线程间能够互相发送信号。另一方面,线程通信使线程能够等待其他线程的信号。 例如,线程B可以等待线程A的一个信号,这个信号会通知线程B数据已经准备好了。本文将讲解以下几个JAVA线程间通信的主题:1、通过共享对象通信2、忙等待3、wait(),notify()和notifyAll()4、丢失的信号5、假唤醒6、多线程等待相同信号7、不要对常量字符串或转载 2016-08-25 09:24:38 · 333 阅读 · 0 评论 -
Java并发包中的同步队列SynchronousQueue在不用JDK版本中实现方式
介绍Java 6的并发编程包中的SynchronousQueue是一个没有数据缓冲的BlockingQueue,生产者线程对其的插入操作put必须等待消费者的移除操作take,反过来也一样。不像ArrayBlockingQueue或LinkedListBlockingQueue,SynchronousQueue内部并没有数据缓存空间,你不能调用peek()方法来看队列中是否有数据元素,因为转载 2016-08-25 08:50:17 · 830 阅读 · 0 评论 -
ConcurrentHashMap从jdk1.7到jdk1.8的变化
一、简单回顾ConcurrentHashMap在jdk1.7中的设计 先简单看下ConcurrentHashMap类在jdk1.7中的设计,其基本结构如图所示:每一个segment都是一个HashEntry[] table, table中的每一个元素本质上都是一个HashEntry的单向队列。比如table[3]为首节点,table[3]->next为节点1,之后为节点2,依次类转载 2016-08-24 17:25:56 · 8366 阅读 · 2 评论 -
线程池与线程队列分析-优
· 线程池是对象池的一个有用的例子,它能够节省在创建它们时候的资源开销。并且线程池对系统中的线程数量也起到了很好的限制作用。· 线程池中的线程数量必须仔细的设置,否则冒然增加线程数量只会带来性能的下降。· 在定制ThreadPoolExecutor时,遵循KISS原则,通常情况下会提供最好的性能。 线程池类为java.util.concurrent.ThreadPollExe原创 2016-08-24 14:00:36 · 9523 阅读 · 0 评论 -
LDAP服务器的概念和原理简单介绍
转自http://www.open-open.com/lib/view/open1426834264554.html1. 目录服务目录是一个为查询、浏览和搜索而优化的专业分布式数据库,它呈树状结构组织数据,就好象Linux/Unix系统中的文件目录一样。目录数据库和关 系数据库不同,它有优异的读性能,但写性能差,并且没有事务处理、回滚等复杂功能,不适于存储修改频繁的数据。所以目转载 2016-08-01 18:43:40 · 12490 阅读 · 0 评论 -
OpenLDAP(2.4.3x)服务器搭建及配置说明
转自https://segmentfault.com/a/1190000002607130本文采用的是从源码编译安装,适合Ubuntu和CentOS平台,通过apt-get或yum方式安装参考补充部分。openldap原理介绍参考这里。环境:Ubuntu: 14.04.1 (trusty), x86_64OpenLDAP: 2.4.31Berkery DB: 5.1.2转载 2016-08-01 17:42:19 · 5954 阅读 · 0 评论 -
使用semaphore实现生产者-消费者简单模型
代码很简单,就不介绍了。需要注意的是,先有生产才有消费,所以与消费者关联的semaphore计数开始为0,而与生产者关联的semaphore计数开始为1。实现:[java] view plain copyimport java.util.concurrent.Semaphore; /** *转载 2016-07-22 14:06:51 · 1080 阅读 · 1 评论 -
Integer,new String 判断相等,值传递,以及引用传递的关系。
Integer,new String 判断相等,值传递,以及引用传递的关系。总结:1.Integer和String,参数引用的时候都是值传递的。StringBuffer和其他对象就都是引用传递的。2.Integer和int比较的时候,自动把Integer的值转换成int值进行比较,所以一般会相等,两个Integer对象比较,不管是new出来的还是等号赋值的,相互比较还会比较原创 2016-03-21 14:01:10 · 1156 阅读 · 0 评论 -
java反射(转载)
Java 反射标签: Java基础动态语言动态语言,是指程序在运行时可以改变其结构:新的函数可以被引进,已有的函数可以被删除等在结构上的变化。比如众所周知的ECMAScript(JavaScript)便是一个动态语言。除此之外如Ruby、Python等也都属于动态语言,而C、C++等语言则不属于动态语言。(引自: 百度百科)var execString转载 2016-01-05 10:24:10 · 343 阅读 · 0 评论 -
CMS gc 实践总结
CMS,全称Concurrent low pause collector,是jdk1.4后期版本开始引入的新gc算法,在jdk5和jdk6中得到了进一步的改进,它的主要适合场景是对响应实践的重要性需求大于吞吐量的要求,能够承受垃圾回收线程和应用线程共享处理器资源,并且应用中存在比较多的长生命周期的对象的应用。CMS是用于对tenured generation的回收,也就是年老代的回收,目标是尽量减转载 2015-06-02 15:23:54 · 749 阅读 · 0 评论