自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

技术崛起

java 软件工程师 软件 开发 Hadoop

  • 博客(60)
  • 资源 (6)
  • 问答 (1)
  • 收藏
  • 关注

转载 【Java并发编程】之十五:并发编程中实现内存可见的两种方法比较:加锁和volatile变量

1、volatile变量是一种稍弱的同步机制在访问volatile变量时不会执行加锁操作,因此也就不会使执行线程阻塞,因此volatile变量是一种比synchronized关键字更轻量级的同步机制。    2、从内存可见性的角度看,写入volatile变量相当于退出同步代码块,而读取volatile变量相当于进入同步代码块。    3、在代码中如果过度依赖volatile变量来控

2014-03-31 08:55:34 503

转载 【Java并发编程】之十四:图文讲述同步的另一个重要功能:内存可见性

加锁(synchronized同步)的功能不仅仅局限于互斥行为,同时还存在另外一个重要的方面:内存可见性。我们不仅希望防止某个线程正在使用对象状态而另一个线程在同时修改该状态,而且还希望确保当一个线程修改了对象状态后,其他线程能够看到该变化。而线程的同步恰恰也能够实现这一点。     内置锁可以用于确保某个线程以一种可预测的方式来查看另一个线程的执行结果。为了确保所有的线程都能看到共享变量

2014-03-31 08:32:23 449

转载 【Java并发编程】之十三:生产者—消费者模型(含代码)

生产者消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一存储空间,生产者向空间里生产数据,而消费者取走数据。    这里实现如下情况的生产--消费模型:    生产者不断交替地生产两组数据“姓名--1 --> 内容--1”,“姓名--2--> 内容--2”,消费者不断交替地取得这两组数据,这里的“姓名--1”和“姓名--2”模拟为数据的名称,“内容--1 ”

2014-03-28 17:22:30 494

转载 【Java并发编程】之十二:线程间通信中notifyAll造成的早期通知问题(含代码)

如果线程在等待时接到通知,但线程等待的条件还不满足,此时,线程接到的就是早期通知,如果条件满足的时间很短,但很快又改变了,而变得不再满足,这时也将发生早期通知。这种现象听起来很奇怪,下面通过一个示例程序来说明问题。    很简单,两个线程等待删除List中的元素,同时另外一个线程正要向其中添加项目。代码如下:[java] view plaincopy

2014-03-28 08:54:07 613

转载 【Java并发编程】之十一:线程间通信中notify通知的遗漏(含代码)

notify通知的遗漏很容易理解,即threadA还没开始wait的时候,threadB已经notify了,这样,threadB通知是没有任何响应的,当threadB退出synchronized代码块后,threadA再开始wait,便会一直阻塞等待,直到被别的线程打断。 遗漏通知的代码    下面给出一段代码演示通知是如何遗漏的,如下:[java] vie

2014-03-28 08:43:22 463

转载 Tomcat性能调优

Tomcat性能调优  Tomcat 优化分为系统优化,Java虚拟机调优Tomcat本身的优化。系统优化  对于操作系统优化来说,是尽可能的增大可使用的内存容量、提高CPU的频率,保证文件系统的读写速率等。经过压力测试验证,在并发连接很多的情况下,CPU的处理能力越强,系统运行速度越快。 Java虚拟机调优  应该选择SUN的JVM,在满足项目需要的前提下,尽量选用版

2014-03-27 08:43:09 522

转载 JVM(Java虚拟机)优化大全和案例实战

堆内存设置原理JVM堆内存分为2块:Permanent Space 和 Heap Space。Permanent 即 持久代(Permanent Generation),主要存放的是Java类定义信息,与垃圾收集器要收集的Java对象关系不大。Heap = { Old + NEW = {Eden, from, to} },Old 即 年老代(Old Generation

2014-03-27 08:30:59 502

转载 【Java并发编程】之十:使用wait/notify/notifyAll实现线程间通信的几点重要说明

在Java中,可以通过配合调用Object对象的wait()方法和notify()方法或notifyAll()方法来实现线程间的通信。在线程中调用wait()方法,将阻塞等待其他线程的通知(其他线程调用notify()方法或notifyAll()方法),在线程中调用notify()方法或notifyAll()方法,将通知其他线程从wait()方法处返回。      Object

2014-03-26 23:51:16 517

转载 【Java并发编程】之九:死锁(含代码)

当线程需要同时持有多个锁时,有可能产生死锁。考虑如下情形:      线程A当前持有互斥所锁lock1,线程B当前持有互斥锁lock2。接下来,当线程A仍然持有lock1时,它试图获取lock2,因为线程B正持有lock2,因此线程A会阻塞等待线程B对lock2的释放。如果此时线程B在持有lock2的时候,也在试图获取lock1,因为线程A正持有lock1,因此线程B会阻塞等待A对lock

2014-03-26 23:22:18 423

转载 【Java并发编程】之八:多线程环境中安全使用集合API(含代码)

在集合API中,最初设计的Vector和Hashtable是多线程安全的。例如:对于Vector来说,用来添加和删除元素的方法是同步的。如果只有一个线程与Vector的实例交互,那么,要求获取和释放对象锁便是一种浪费,另外在不必要的时候如果滥用同步化,也有可能会带来死锁。因此,对于更改集合内容的方法,没有一个是同步化的。集合本质上是非多线程安全的,当多个线程与集合交互时,为了使它多线程安全,必须采

2014-03-26 23:06:41 603

转载 【Java并发编程】之七:使用synchronized获取互斥锁的几点说明

在并发编程中,多线程同时并发访问的资源叫做临界资源,当多个线程同时访问对象并要求操作相同资源时,分割了原子操作就有可能出现数据的不一致或数据不完整的情况,为避免这种情况的发生,我们会采取同步机制,以确保在某一时刻,方法内只允许有一个线程。      采用synchronized修饰符实现的同步机制叫做互斥锁机制,它所获得的锁叫做互斥锁。每个对象都有一个monitor(锁标记),当线程拥有这

2014-03-26 22:38:07 444

转载 【Java并发编程】之六:Runnable和Thread实现多线程的区别(含代码)

Java中实现多线程有两种方法:继承Thread类、实现Runnable接口,在程序开发中只要是多线程,肯定永远以实现Runnable接口为主,因为实现Runnable接口相比继承Thread类有如下优势:    1、可以避免由于Java的单继承特性而带来的局限;    2、增强程序的健壮性,代码能够被多个线程共享,代码与数据是独立的;    3、适合多个相同程序代码的线程

2014-03-26 22:09:44 444

转载 Spring源码解析(一) Spring事务控制之Hibernate

本文将对Spring在整合Hibernate事务方面的源码作一下初步的解析,特别是Spring对线程、事务、Hibernate Session三者的绑定关系。(注:本文基于目前最新的Spring 3.1.2 RELEASE 版本的源码进行分析)本文原文链接 http://blog.csdn.net/bluishglc/article/details/7774131 转载请注明出处。

2014-03-26 08:40:39 469

转载 基本数据结构——队列的顺序表示

以下为操作队列的算法,该队列为静态队列,用循环数组实现。给该队列分配的内存长度为len+1,但实际只用了len个内存空间来保存数据,这样做是为了更方便判断队列的满与空。队列中front位置中存放的是队首的数据,rear位置的前一个位置中存放队尾的数据,而rear位置中则没有数据存放,这样做的目的是为了在入队和出队时方便对队列的操作,而不用考虑特殊情况操作系统:ubunt

2014-03-26 08:17:13 534

转载 JAVA基础知识点

1、使用浮点型数值时,默认的类型是double,后面加上f或F才被识别为float类型。2、使用数组前一定要先开辟内存空间,当然也可以直接用静态赋值的方式。3、Java中的变量为全局变量时,可以不赋值,直接使用,因为有默认值,但是作为局部变量时,就必须在赋值后才能使用另外。另外,凡是用new关键字新建出来的对象或数组等,对象或数组里面的基本类型都被初始化了默认值,用static关键

2014-03-26 00:05:26 496

转载 详细说明JDK环境变量中dt.jar、tools.jar等变量值的作用(结合ClassLoader)

学习Java的人都要经历配置JDK环境变量这一步,安装好JDK后,我们一般会做如下配置:1.打开我的电脑--属性--高级--环境变量 2.新建环境变量JAVA_HOME 和CLASSPATH 变量名:JAVA_HOME 变量值:C:\Program Files\Java\jdk1.7.0变量名:CLASSPATH 变量值:.;%JAVA_HOME%\lib\dt.jar;%

2014-03-25 23:51:53 590

转载 【深入Java虚拟机】之八:Java垃圾收集机制

对象引用    Java中的垃圾回收一般是在Java堆中进行,因为堆中几乎存放了Java中所有的对象实例。谈到Java堆中的垃圾回收,自然要谈到引用。在JDK1.2之前,Java中的引用定义很很纯粹:如果reference类型的数据中存储的数值代表的是另外一块内存的起始地址,就称这块内存代表着一个引用。但在JDK1.2之后,Java对引用的概念进行了扩充,将其分为强引用(Stron

2014-03-25 23:40:31 510

转载 【深入Java虚拟机】之七:Javac编译与JIT编译

编译过程    不论是物理机还是虚拟机,大部分的程序代码从开始编译到最终转化成物理机的目标代码或虚拟机能执行的指令集之前,都会按照如下图所示的各个步骤进行:        其中绿色的模块可以选择性实现。很容易看出,上图中间的那条分支是解释执行的过程(即一条字节码一条字节码地解释执行,如JavaScript),而下面的那条分支就是传统编译原理中从源代码到目

2014-03-25 23:18:01 543

转载 【深入Java虚拟机】之六:Java语法糖

语法糖(Syntactic Sugar),也称糖衣语法,是由英国计算机学家Peter.J.Landin发明的一个术语,指在计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。Java中最常用的语法糖主要有泛型、变长参数、条件编译、自动拆装箱、内部类等。虚拟机并不支持这些语法,它们在编译阶段就被还原回了简单的基础语法结构,这个过程成为解语法糖。    泛

2014-03-25 23:04:38 427

转载 【深入Java虚拟机】之五:多态性实现机制——静态分派与动态分派

方法解析    Class文件的编译过程中不包含传统编译中的连接步骤,一切方法调用在Class文件里面存储的都只是符号引用,而不是方法在实际运行时内存布局中的入口地址。这个特性给Java带来了更强大的动态扩展能力,使得可以在类运行期间才能确定某些目标方法的直接引用,称为动态连接,也有一部分方法的符号引用在类加载阶段或第一次使用时转化为直接引用,这种转化称为静态解析。这在前面的“Java内存

2014-03-25 22:57:03 431

转载 【深入Java虚拟机】之四:类加载机制

类加载过程    类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载七个阶段。它们开始的顺序如下图所示:    其中类加载的过程包括了加载、验证、准备、解析、初始化五个阶段。在这五个阶段中,加载、验证、准备和初始化这四个阶段发生的顺序是确定的,而解析阶段则不一定,它在某些情况下可以在初始化阶段之后开始,这是为

2014-03-25 13:14:42 508

转载 【深入Java虚拟机】之三:类初始化

类初始化是类加载过程的最后一个阶段,到初始化阶段,才真正开始执行类中的Java程序代码。虚拟机规范严格规定了有且只有四种情况必须立即对类进行初始化:遇到new、getstatic、putstatic、invokestatic这四条字节码指令时,如果类还没有进行过初始化,则需要先触发其初始化。生成这四条指令最常见的Java代码场景是:使用new关键字实例化对象时、读取或设置一个类的静

2014-03-25 08:44:46 490

转载 Java中try catch finally语句中含有return语句的执行情况(总结版)

在这里看到了try catch finally块中含有return语句时程序执行的几种情况,但其实总结的并不全,而且分析的比较含糊。但有一点是可以肯定的,finally块中的内容会先于try中的return语句执行,如果finall语句块中也有return语句的话,那么直接从finally中返回了,这也是不建议在finally中return的原因。下面来看这几种情况。情况一(t

2014-03-25 08:34:06 707

转载 【深入Java虚拟机】之二:Class类文件结构

平台无关性    Java是与平台无关的语言,这得益于Java源代码编译后生成的存储字节码的文件,即Class文件,以及Java虚拟机的实现。不仅使用Java编译器可以把Java代码编译成存储字节码的Class文件,使用JRuby等其他语言的编译器也可以把程序代码编译成Class文件,虚拟机并不关心Class的来源是什么语言,只要它符合一定的结构,就可以在Java中运行。Java语言中的各

2014-03-25 08:32:58 482

转载 【深入Java虚拟机】之一:Java内存区域与内存溢出

内存区域    Java虚拟机在执行Java程序的过程中会把他所管理的内存划分为若干个不同的数据区域。Java虚拟机规范将JVM所管理的内存分为以下几个运行时数据区:程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区。下面详细阐述各数据区所存储的数据类型。   程序计数器(Program Counter Register)   

2014-03-24 09:09:16 827 1

转载 【Java并发编程】之五:volatile变量修饰符—意料之外的问题(含代码)

volatile用处说明    在JDK1.2之前,Java的内存模型实现总是从主存(即共享内存)读取变量,是不需要进行特别的注意的。而随着JVM的成熟和优化,现在在多线程环境下volatile关键字的使用变得非常重要。在当前的Java内存模型下,线程可以把变量保存在本地内存(比如机器的寄存器)中,而不是直接在主存中进行读写。这就可能造成一个线程在主存中修改了一个变量的值,而另外一个线

2014-03-24 08:35:02 578

转载 【Java并发编程】之四:守护线程与线程阻塞的四种情况

守护线程  Java中有两类线程:User Thread(用户线程)、Daemon Thread(守护线程)      用户线程即运行在前台的线程,而守护线程是运行在后台的线程。 守护线程作用是为其他前台线程的运行提供便利服务,而且仅在普通、非守护线程仍然运行时才需要,比如垃圾回收线程就是一个守护线程。当VM检测仅剩一个守护线程,而用户线程都已经退出运行时,

2014-03-24 08:20:49 536

转载 【Java并发编程】之三:线程挂起、恢复与终止的正确方法(含代码)

挂起和恢复线程    Thread 的API中包含两个被淘汰的方法,它们用于临时挂起和重启某个线程,这些方法已经被淘汰,因为它们是不安全的,不稳定的。如果在不合适的时候挂起线程(比如,锁定共享资源时),此时便可能会发生死锁条件——其他线程在等待该线程释放锁,但该线程却被挂起了,便会发生死锁。另外,在长时间计算期间挂起线程也可能导致问题。    下面的代码演示了通过休眠来延缓运行,模

2014-03-24 08:16:10 655

转载 【Java并发编程】之二:线程中断(含代码)

使用interrupt()中断线程    当一个线程运行时,另一个线程可以调用对应的Thread对象的interrupt()方法来中断它,该方法只是在目标线程中设置一个标志,表示它已经被中断,并立即返回。这里需要注意的是,如果只是单纯的调用interrupt()方法,线程并没有实际被中断,会继续往下执行。    下面一段代码演示了休眠线程的中断:[java]

2014-03-23 17:08:15 593

转载 【Java并发编程】之一:可重入内置锁

每个Java对象都可以用做一个实现同步的锁,这些锁被称为内置锁或监视器锁。线程在进入同步代码块之前会自动获取锁,并且在退出同步代码块时会自动释放锁。获得内置锁的唯一途径就是进入由这个锁保护的同步代码块或方法。    当某个线程请求一个由其他线程持有的锁时,发出请求的线程就会阻塞。然而,由于内置锁是可重入的,因此如果某个线程试图获得一个已经由它自己持有的锁,那么这个请求就会成功。“重入”意味

2014-03-23 16:47:40 648

转载 连载:面向对象葵花宝典:思想、技巧与实践(18) - 用例分析

很多人在分析需求的时候,采用的是东扯葫芦西扯瓢的方式,列出了很多的需求点,但当你看完后,你还是不知道到底要干嘛!!  ---- 写在前面用例,英文名称Use Case,英文和中文都是很好理解,因为大家都这么用,我们暂且不去追究名称上的问题,只要知道“用例是用来描述需求的流程”,即:描述5W1H中的How。 看起来用例应该很好写,因为用例是描述需求的流程的,而需求

2014-03-23 16:09:24 472

转载 连载:面向对象葵花宝典:思想、技巧与实践(17) - 需求分析518方法

对于大部分人来说,可能并没有机会进行需求分析,因为在大部分的公司里面,需求分析都是有很多工作经验的资深人员,或者是对系统很熟悉的老的开发人员。 所以,很多人都会对需求分析有一种景仰的心态,认为既然做需求的人要求这么高,那么需求分析一定很复杂、很难、很高级了。而且很多需求分析人员动不动就会教训“你要站在客户的角度”、“你要全面的分析”等,然后再抛出几个需求建模之类的玩意吓吓你。。。。

2014-03-23 12:43:45 570

转载 连载:面向对象葵花宝典:思想、技巧与实践(16) - 需求分析终极目的

需求分析有三种级别,你自认为属于哪一级呢 ?   ---写在前面============================华丽丽的分割线=============================需求分析的目的是什么? 你可能会毫不犹豫的回答:需求分析的目的当然是了解客户需要什么! 这个回答看起来是毫无疑问的,我们当然要了解客户需

2014-03-23 12:30:31 607

转载 连载:面向对象葵花宝典:思想、技巧与实践(15) - 需求详解

很多人像老黄牛一样辛辛苦苦做了很多年软件开发,但却连“需求”到底是什么都不清楚。当然,没有人自己会承认这点!【需求到底是什么】凡事都有一个开头,软件项目也不例外,对于软件项目来说,需求就是项目最开始的一个输入。 参考维基百科,需求定义如下:In systems engineering, a requirement can be a

2014-03-23 12:20:19 524

转载 连载:面向对象葵花宝典:思想、技巧与实践(14) - 面向对象开发技术流程

抛开项目流程,让我们来谈谈“技术流程”吧!!谈到流程,很多人立刻就会想到熟悉的瀑布模型、螺旋模型、迭代开发、敏捷、RUP等一堆软件工程相关的软件开发流程,但对于大部分人来说,这些流程仅仅是项目管理上的概念,只有项目经理开例会时那红红绿绿的甘特图、燃尽图、路径图等,或者只有评估工作量和是否要加班的时候,我们才会意识到这些流程的存在。 通俗的讲,项目管理上的流程主要

2014-03-23 12:06:32 415

转载 连载:面向对象葵花宝典:思想、技巧与实践(13) - “多态” 详解

在此要向将polymorphism翻译成“多态”的人致敬!因为多态的英文实在是太难理解了,而中文翻译得又如此形象如此贴切。 从字面意思上就可以看出,多态就是“多种形态”的意思。但仔细探究一下:“多种形态”其实还是没法很好的理解,不同的人也还是会有不同的理解。 动画片看得多的同学可能会以为:多种形态,就是很多种变身啦 :),就像孙悟空72变一样,一会儿可以变成

2014-03-23 11:19:52 500

转载 连载:面向对象葵花宝典:思想、技巧与实践(12) - “继承” 详解

继承 = 遗传继承是面向对象最基本的特征,如果一个语言没有继承机制,就谈不上真正的面向对象的语言。 继承本身很好理解,和我们日常生活中的“继承”概念基本一样:子承父业!所以,你可以看到面向对象的编程语言里面,有了“父类”、“子类”的概念。 但是我个人认为“继承”这个说法并不确切,一般我们理解“继承”,都是理解为继承产业、继承财产,例如李泽钜继承李嘉诚的事业。

2014-03-23 11:12:19 445

转载 连载:面向对象葵花宝典:思想、技巧与实践(11) - “封装” 详解

封装的概念本身很好理解,意思就是把一堆东东装起来。 但要想真正理解封装,这样还远远不够。第一个问题是:我们要封装什么?这个问题很好回答,封装当然是封装不想让别人知道或者看到的东东了。例如:你的身家。。。。。。漂亮MM的年龄。。。。。。富二代的女朋友数。。。。。明星是否整过容。。。。。。你是如何赚到100万的(想想什么样

2014-03-23 11:07:54 475

转载 连载:面向对象葵花宝典:思想、技巧与实践(10) - “抽象” 详解

抽象的中文概念非常形象,简单来说就是“抽取出来比较像的部分”。 那么,在面向对象的领域里,抽取什么东西比较像的部分? 还记得前面给类下的定义么?我们一起来回顾一下:类就是一组相似事物的统称。再结合我们对象的定义:对象就是一个具体的类,一个真实存在的类。我们就很容易发现了抽象的详细含义:抽取多个对象或者类中比较像的部分。   

2014-03-23 10:26:50 542

转载 连载:面向对象葵花宝典:思想、技巧与实践(9) - “抽象类” 详解

抽象类是一种特殊的类,其特殊性在于抽象类只能用于继承,不能被实例化为具体的对象。例如在Java中不能new一个抽象类,但可以extends一个抽象类。 抽象类的定义其实很简单,但其使用并不那么简单,有几个问题我们需要深入研究一下。 第一个问题是:有了类,为什么还要抽象类,为什么设计一种只能继承,不能实例化的类?答案就在于:某些场景下普通类不够用。例如,“苹果

2014-03-22 23:06:43 617

CollabNetSubversion-client-1.6.11-3.win32

NetBeans 集成 SVN 客户端,绝对好用,前提是版本一定要对应,不对应可能会出问题

2014-03-27

hadoop安装

hadoop 安装文档,详细的hadoop 安装文档

2013-07-10

java 打开浏览器

用java 技术打开电脑的浏览器,可以实现多操作系统

2013-07-09

jersey demo

jersey demo , jersey+spring+mybitas 做的一个小 demo

2013-03-19

hadoop-eclipse-plugin-1.0.1

倒卖hadoop-eclipse-plugin-1.0.1.jar

2012-12-19

java Socket 编程

Java 语言从一开始就是为了让人们使用互联网而 境下,带领你进入对这个问题的解答之路。 设计的,它为实现程序的相互通信提供了许多有用的抽象应用程序接口(API, Application Programming Interface),这类应用程序接口被称为套接字(sockets)。 在我们开始探究套接字的细节之前, 有必要向读者简单介绍计算机网络和通信协议的整 体框架,以使读者能清楚我们的代码将应用的地方。 本章的目的不是向读者介绍计算机网络 和 TCP/IP 协议是如何工作的(已经有很多相关内容的教程[ ][ ][ ][ ][ ]),而是介绍一些基 本的概念和术语。

2012-12-06

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除