
JAVA
文章平均质量分 87
iteye_19426
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
并发编程(七)------分布式环境中并发问题
在分布式环境中,处理并发问题就没办法通过操作系统和JVM的工具来解决,那么在分布式环境中,可以采取一下策略和方式来处理:避免并发时间戳串行化数据库行锁统一触发途径避免并发在分布式环境中,如果存在并发问题,那么很难通过技术去解决,或者解决的代价很大,所以我们首先要想想是不是可以通过某些策略和业务设计来避免并 发。比如通过合理的时间调度,避开共享资源的存取冲...原创 2015-01-26 13:01:28 · 105 阅读 · 0 评论 -
动态更改JVM里的class
近来需要完成一个feature:修改已load到JVM中的某个class,对其加一些代码,以此来动态修改运行中的程序。对着这个feature我找到的方案是agent+Instrumentation+ASM一路做下来有以下几点比较有意思:1)动态attach agent到某个JVM进程一般使用agent都是静态的,直接在运行某程序时加agent参数,这样agent会先于程序启...原创 2015-01-22 20:32:35 · 273 阅读 · 0 评论 -
独木桥问题多线程--java编程
public class Pedestrian implements Runnable{ static int an,bn; static int count; boolean as=false,bs=false; public static void main(String [] args) { Pedestrian p=new Pedestrian(); } public ...原创 2015-01-19 10:27:18 · 814 阅读 · 0 评论 -
线程安全与锁优化
Brian Goetz对线程安全的定义:当多个线程访问一个对象时,如果不考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调度方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象就是线程安全的 并发处理的广泛应用是使得Amdahl定律替代摩尔定律成为计算机性能发展源动力,是人类压榨计算机运算能力最有力的武器 线程安全 限定为多个线程之间存在共享数...原创 2015-01-19 10:27:07 · 85 阅读 · 0 评论 -
JAVA多线程编程
这个专题主要讨论并发编程的问题,所有的讨论都是基于JAVA语言的(因其独特的内存模型以及原生对多线程的支持能力),不过本文传达的是一种分析的思路,任何有经验的朋友都能很轻松地将其扩展到任何一门语言。 注:本文的主要参考资料为结城浩所著《JAVA多线程设计模式》。 线程的英文名Thread,原意指“细丝”。在多线程程序中,若要追踪各个线程的轨迹,就会派生出一系列错综复杂的乱线团。假设在运行过程中...原创 2015-01-19 10:26:51 · 88 阅读 · 0 评论 -
Java多线程基础
Thread类的run方法和start方法 Java语言写成的程序一定是先从主线程开始操作,所以必须在程序的某个位置启动新的线程,才能算是真正的多线程程序。start()方法是 Thread类的方法,调用start()方法,就会启动新的线程。请注意,被调用来启动线程的是start()方法,而非run()方法。调用 start()方法之后,Java执行处理系统会在背后启动新...原创 2015-01-19 10:26:39 · 124 阅读 · 0 评论 -
Java多线程设计模式
Introduction 1 Java语言的线程开始执行Java程序后,至少会有一个线程开始操作,有操作的是被称为主线程的线程,主线程执行输入类的main()。当main()里的所有处理均结束后,则主线程也同时结束。当应用程序的规模大到一定程度,程序里的多线程会以每种形式存在。以下是几个常见的范例:1) GUI应用程序。2) 比较花费时间的I/O处理。3) 多个客户端。如欲启动线程...原创 2015-01-19 10:26:23 · 135 阅读 · 0 评论 -
java 死锁产生原因及解锁
进程死锁及解决办法 一、要点提示(1) 掌握死锁的概念和产生死锁的根本原因。(2) 理解产生死锁的必要条件--以下四个条件同时具备:互斥条件、不可抢占条件、占有且申请条件、循环等待条件。(3) 记住解决死锁的一般方法,掌握死锁的预防和死锁的避免二者的基本思想。(4) 掌握死锁的预防策略中资源有序分配策略。(5) 理解进程安全序列的概念,理解死锁与安全序列的关系。(6...原创 2015-01-17 15:08:36 · 117 阅读 · 0 评论 -
JVM学习笔记(一)------基本结构
从Java平台的逻辑结构上来看,我们可以从下图来了解JVM:从上图能清晰看到Java平台包含的各个逻辑模块,也能了解到JDK与JRE的区别对于JVM自身的物理结构,我们可以从下图鸟瞰一下:对于JVM的学习,在我看来这么几个部分最重要:Java代码编译和执行的整个过程JVM内存管理及垃圾回收机制 ...原创 2015-01-23 19:03:39 · 92 阅读 · 0 评论 -
JVM学习笔记(二)------Java代码编译和执行的整个过程
Java代码编译是由Java源码编译器来完成,流程图如下所示:Java字节码的执行是由JVM执行引擎来完成,流程图如下所示: Java代码编译和执行的整个过程包含了以下三个重要的机制:Java源码编译机制类加载机制类执行机制Java源码编译机制Java 源码编译由以下三个过程组成:分析和输入到符号表注解处理语义分析和生成class文...原创 2015-01-23 19:03:51 · 97 阅读 · 0 评论 -
并发编程(六)------Java多线程性能优化
大家使用多线程无非是为了提高性能,但如果多线程使用不当,不但性能提升不明显,而且会使得资源消耗更大。下面列举一下可能会造成多线程性能问题的点:死锁过多串行化过多锁竞争切换上下文内存同步下面分别解析以上性能隐患死锁关于死锁,我们在学习操作系统的时候就知道它产生的原因和危害,这里就不从原理上去累述了,可以从下面的代码和图示重温一下死锁产生的原因:...原创 2015-01-25 20:52:21 · 103 阅读 · 0 评论 -
并发编程(五)------Java多线程开发技巧
很多开发者谈到Java多线程开发,仅仅停留在new Thread(...).start()或直接使用Executor框架这个层面,对于线程的管理和控制却不够深入,通过读《Java并发编程实践》了解到了很多不为我知但又非常重要的细节,今日整理如下。不应用线程池的缺点有些开发者图省事,遇到需要多线程处理的地方,直接new Thread(...).start(),对于一般场景是没问题的,但如...原创 2015-01-25 20:52:09 · 108 阅读 · 0 评论 -
并发编程(四)------Java并发工具
基于线程安全的一些原则来编程当然可以避免并发问题,但不是所有人都能写出高质量的线程安全的代码,并且如果代码里到处都是线程安全的控制也极大地 影响了代码可读性和可维护性。因此,Java平台为了解决这个问题,提供了很多线程安全的类和并发工具,通过这些类和工具就能更简便地写线程安全的代码。 归纳一下有以下几种:同步容器类并发容器类生产者和消费者模式阻塞和可中断方法Synch...原创 2015-01-25 20:51:56 · 96 阅读 · 0 评论 -
并发编程(三)------Java存储模型和共享对象
很多程序员对一个共享变量初始化要注意可见性和安全发布(安全地构建一个对象,并其他线程能正确访问)等问题不是很理解,认为Java是一个屏蔽内 存细节的平台,连对象回收都不需要关心,因此谈到可见性和安全发布大多不知所云。其实关键在于对Java存储模型,可见性和安全发布的问题是起源于 Java的存储结构。Java存储模型原理有很多书和文章都讲解过Java存储模型,其中一个图很清晰地说明了其存...原创 2015-01-25 20:51:44 · 131 阅读 · 0 评论 -
并发编程(二)------写线程安全的Java代码
在写Java程序的时候,何时需要进行并发控制,关键在于判断这段程序或这个类是否是线程安全的。当多个线程访问一个类时,如果不用考虑这些线程在运行时环境下的调度和交替执行,并且不需要额外的同步,这个类的行为仍然是正确的,那么称这个类是线程安全的。我们设计类就是要在有潜在并发问题存在情况下,设计线程安全的类。线程安全的类可以通过以下手段来满足:不跨线程共享变量使状态变量为不可变的...原创 2015-01-25 20:51:32 · 99 阅读 · 0 评论 -
并发编程(一)操作系统
在多线程、多处理器甚至是分布式环境的编程时代,并发是一个不可回避的问题,很多程序员一碰到并发二字头皮就发麻,也包括我。既然并发问题摆在面前 一个到无法回避的坎,倒不如拥抱它,把它搞清楚,决心花一定的时间从操作系统底层原理到Java的基础编程再到分布式环境等几个方面深入探索并发问题。先 就从原理开始吧。并发产生的原因虽然从直观效果上,处理器是并行处理多项任务,但本质上一个处理器在某个...原创 2015-01-23 19:04:31 · 141 阅读 · 0 评论 -
JVM学习笔记(四)------内存调优
首先需要注意的是在对JVM内存调优的时候不能只看操作系统级别Java进程所占用的内存,这个数值不能准确的反应堆内存的真实占用情况,因为GC 过后这个值是不会变化的,因此内存调优的时候要更多地使用JDK提供的内存查看工具,比如JConsole和Java VisualVM。 对JVM内存的系统级的调优主要的目的是减少GC的频率和Full GC的次数,过多的GC和Full GC是会占用很多的...原创 2015-01-23 19:04:15 · 93 阅读 · 0 评论 -
JVM学习笔记(三)------内存管理和垃圾回收
JVM内存组成结构JVM栈由堆、栈、本地方法栈、方法区等部分组成,结构图如下所示:1)堆所有通过new创建的对象的内存都在堆中分配,其大小可以通过-Xmx和-Xms来控制。堆被划分为新生代和旧生代,新生代又被进一步划分为Eden和Survivor区,最后Survivor由From Space和To Space组成,结构图如下所示:新生代。新建的对象都是用新生代分配内存...原创 2015-01-23 19:04:03 · 105 阅读 · 0 评论 -
java synchronized详解
记下来,很重要。Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。 一、当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。 二、然而,当一个线程访问obje...原创 2015-01-17 15:08:15 · 85 阅读 · 0 评论 -
HashMap和ConcurrentHashMap浅析
HashMap hashmap本质数据加链表。根据key取得hash值,然后计算出数组下标,如果多个key对应到同一个下标,就用链表串起来,新插入的在前面。看3段重要代码摘要: a:[java] view plaincopypublic HashMap(int initialCapacity, float loadFactor) { in...原创 2015-01-17 15:07:47 · 101 阅读 · 0 评论 -
HashTable, hashmap ,currenthashmap
在Java类库中出现的第一个关联的集合类是 Hashtable ,它是JDK 1.0的一部分。 Hashtable 提供了一种易于使用的、线程安全的、关联的map功能,这当然也是方便的。然而,线程安全性是凭代价换来的―― Hashtable 的所有方法都是同步的。此时,无竞争的同步会导致可观的性能代价。 Hashtable 的后继者 HashMap 是作为JDK1.2中的集合框架的一部分出现的...原创 2015-01-17 15:07:32 · 84 阅读 · 0 评论 -
LinkedList基本用法
LinkedList类是双向列表,列表中的每个节点都包含了对前一个和后一个元素的引用.LinkedList的构造函数如下1. public LinkedList(): ——生成空的链表2. public LinkedList(Collection col): 复制构造函数1、获取链表的第一个和最后一个元素[java] view plaincopy import j...原创 2016-04-05 21:25:44 · 86 阅读 · 0 评论 -
ArrayList和LinkedList区别
一般大家都知道ArrayList和LinkedList的大致区别: 1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。 3.对于新增和删除操作add和remove,LinedList比较占优势,因为Arr...原创 2016-04-05 21:24:53 · 93 阅读 · 0 评论 -
Java集合类详解
集合类说明及区别Collection├List│├LinkedList│├ArrayList│└Vector│ └Stack└SetMap├Hashtable├HashMap└WeakHashMapCollection接口 Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。一些 Collection允许相...原创 2016-03-31 15:47:46 · 86 阅读 · 0 评论 -
JAVA电商面试题
一、Java线程池的具体实现,用过哪些Java多线程并发控制框架?答:(1)引用来源:http://www.open-open.com/lib/view/open1406778349171.html参考源码JDK源码类:java.util.concurrent.ThreadPoolExecutorJetty6源码类:org.mortbay.thread.QueuedThreadP...原创 2016-03-30 13:45:19 · 1638 阅读 · 0 评论 -
jdk动态代理与cglib动态代理有什么区别
<!--StartFragment-->AOP 使用的设计模式就是代理模式,是对IOC设计的补充。为了扩展性,往往会加上反射,动态生成字节码,生成代理类。 这里往往还会使用到DI,把代理的实现类通过依赖注入的方式,传给代理工厂。 关于生成动态代理类的方式有两种:JDK和CGLIB。 CGLIB,是一个开源工具。spring 和hibernate已经广泛使用。 关于AOP的概念解释网...原创 2016-03-25 14:34:25 · 212 阅读 · 0 评论 -
Spring @Resource、@Autowired、@Qualifier的注解注入及区别
<!--StartFragment--><!--EndFragment-->spring2.5提供了基于注解(Annotation-based)的配置,我们可以通过注解的方式来完成注入依赖。在Java代码中可以使用 @Resource或者@Autowired注解方式来经行注入。虽然@Resource和@Autowired都可以来完成注入依赖,但它们之间是有区 别的...原创 2016-03-23 10:04:50 · 110 阅读 · 0 评论 -
Spring 实现数据库读写分离
<!--StartFragment--> <!--EndFragment-->现在大型的电子商务系统,在数据库层面大都采用读写分离技术,就是一个Master数据库,多个Slave数据库。Master库负责数据更新和 实时数据查询,Slave库当然负责非实时数据查询。因为在实际的应用中,数据库都是读多写少(读取数据的频率高,更新数据的频率相对较少),...原创 2016-03-09 17:58:16 · 99 阅读 · 0 评论 -
Java RandomAccessFile用法
RandomAccessFile RandomAccessFile是用来访问那些保存数据记录的文件的,你就可以用seek( )方法来访问记录,并进行读写了。这些记录的大小不必相同;但是其大小和位置必须是可知的。但是该类仅限于操作文件。 RandomAccessFile不属于InputStream和OutputStream类系的。实际上,除了实现DataInput和 DataOutp...原创 2015-11-19 09:21:47 · 193 阅读 · 0 评论 -
Java中Array与ArrayList的主要区别
1)精辟阐述: 可以将 ArrayList想象成一种“会自动扩增容量的Array”。2)Array([]):最高效;但是其容量固定且无法动态改变; ArrayList: 容量可动态增长;但牺牲效率;3)建议: 基于效率和类型检验,应尽可能使用Array,无法确定数组大小时才使用ArrayList! 不过当你试着解决更一般化的问题时,Array的功能就可能过于受限。4)Java中一切皆...原创 2016-04-05 21:26:35 · 90 阅读 · 0 评论 -
JAVA集合类框架
为什么要使用集合类当你事先不知道要存放数据的个数,或者你需要一种比数组下标存取机制更灵活的方法时,你就需要用到集合类。理解集合类集合类存放于java.util包中。 集合类存放的都是对象的引用,而非对象本身,出于表达上的便利,我们称集合中的对象就是指集合中对象的引用(reference)。 集合类型主要有3种:set(集)、list(列表)和map(映射)。...原创 2016-04-05 21:27:08 · 88 阅读 · 0 评论 -
java集合类
简化图:Java平台提供了一个全新的集合框架。“集合框架”主要由一组用来操作对象的接口组成。不同接口描述一组不同数据类型。 Java 2集合框架图 集合接口:6个接口(短虚线表示),表示不同集合类型,是集合框架的基础。 抽象类:5个抽象类(长虚线表示),对集合接口的部分实现。可扩展为自定义集合类。 实现类:8个实现类(实线表示),对接口的具体实现。 在很大程度上,一旦您理解了接口,您就...原创 2015-01-17 15:07:13 · 138 阅读 · 0 评论 -
JAVA NIO 简介
1. 基本 概念 IO 是主存和外部设备 ( 硬盘、终端和网络等 ) 拷贝数据的过程。 IO 是操作系统的底层功能实现,底层通过 I/O 指令进行完成。所有语言运行时系统提供执行 I/O 较高级别的工具。 (c 的 printf scanf,java 的面向对象封装 )2. Java 标准 io 回顾 Java 标准 IO 类库是 io 面向对象的一种抽象。基于本地...原创 2015-01-16 09:16:51 · 92 阅读 · 0 评论 -
ArrayList,LinkedList,Vector的关系和区别
一、同步性ArrayList,LinkedList是不同步的,而Vector是的。所以如果要求线程安全的话,可以使用ArrayList或LinkedList,可以节省为同步而耗费开销。但在多线程的情况下,有时候就不得不使用Vector了。当然,也可以通过一些办法包装ArrayList,LinkedList,使他们也达到同步,但效率可能会有所降低。二、数据增长 从内部实现机制来讲Arr...原创 2015-01-16 09:15:06 · 72 阅读 · 0 评论 -
JAVA高性能编程
1.这里比较一下ArrayList和LinkedList:ArrayList是基于数组,LinkedList基于链表实现。对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。查找操作indexOf,l...原创 2015-01-16 09:14:26 · 94 阅读 · 0 评论 -
HashMap和Hashtable的区别
导读: 1 HashMap不是线程安全的 hastmap是一个接口 是map接口的子接口,是将键映射到值的对象,其中键和值都是对象,并且不能包含重复键,但可以包含重复值。HashMap允许null key和null value,而hashtable不允许。 2 HashTable是线程安全的一个Collection。 HashMap是Has...原创 2015-01-16 09:13:54 · 80 阅读 · 0 评论 -
Java容器类List、ArrayList、Vector及map、HashTable、HashMap的区别与用法
ArrayList 和Vector是采用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,都允许直接序号索引元素,但是插入数据要设计到数组元素移动 等内存操作,所以索引数据快插入数据慢,Vector由于使用了synchronized方法(线程安全)所以性能上比ArrayList要 差,LinkedList使用双向链表实现存储,按序号索引数据需要进行向前或向后遍历,但是插入数...原创 2015-01-16 09:13:12 · 87 阅读 · 0 评论 -
java.math.BigDecimal类的用法
在java中提供了大数字的操作类,即java.math.BinInteger类和java.math.BigDecimal类。这两个类用于高精度计 算,其中BigInteger类是针对大整数的处理类,而BigDecimal类则是针对大小数的处理类。下边我们介绍BigDecimal类: BigDecimal的实现利用到了BigInteger,不同的是BigDecimal加入了小...原创 2015-01-08 10:19:11 · 88 阅读 · 0 评论 -
通Java工程转换成maven工程
一、使用IDE提供的转换功能: 1. 右键普通Java项目,在弹出的菜单中选择[Configure]-[Convert to Maven Project]: 2. 在弹出的对话框中输入项目的groupId, artifactId和version等,点击[Finish],在根目录下生成maven的pom.xml文件。 3. 经过IDE转换的maven项目还不能满足要求,需要手动配置: a. 将p...原创 2016-04-29 15:01:37 · 122 阅读 · 0 评论 -
Java代码优化
在Java程序中,性能问题的大部分原因并不在于Java语言,而是在于程序本身。所以养成好的代码编写习惯非常重要。下面我们就来具体地分析一下: 1、尽量重用对象比如:String 对象的使用中,出现字符串连接情况时应用StringBuffer 代替。由于系统不仅要花时间生成对象,以后可能还需花时间对这些对象进行垃圾回收和处理。因此,生成过多的对象将会给程序的性能带来很大的影响。 ...原创 2015-08-14 09:32:02 · 93 阅读 · 0 评论