自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 收藏
  • 关注

转载 Java同步机制浅谈 synchronized对代码作何影响?

Java对多线程的支持与同步机制深受大家的喜爱,似乎看起来使用了synchronized关键字就可以轻松地解决多线程共享数据同步问题。到底如何?――还得对synchronized关键字的作用进行深入了解才可定论。总的说来,synchronized关键字可以作为函数的修饰符,也可作为函数内的语句,也就是平时说的同步方法和同步语句块。如果再细的分类,synchronized可作用于instance变量

2008-08-07 16:57:00 566

转载 彻底明白Java的IO系统

 Input和Output1.    stream代表的是任何有能力产出数据的数据源,或是任何有能力接收数据的接收源。在Java的IO中,所有的stream(包括Input和Output)都包括两种类型:1.1    以字节为导向的stream以字节为导向的stream,表示以字节为单位从stream中读取或往stream中写入信息。以字节为导向的stream包括下面几种类型:

2008-08-07 09:02:00 383

转载 Java 理论与实践: 并发集合类

在Java类库中出现的第一个关联的集合类是 Hashtable ,它是JDK1.0的一部分。 Hashtable 提供了一种易于使用的、线程安全的、关联的map功能,这当然也是方便的。然而,线程安全性是凭代价换来的―― Hashtable 的所有方法都是同步的。此时,无竞争的同步会导致可观的性能代价。 Hash

2008-08-05 18:47:00 425

转载 Java 理论与实践: 哈希

虽然Java语言不直接支持关联数组 -- 可以使用任何对象作为一个索引的数组 -- 但在根 Object 类中使用 hashCode() 方法明确表示期望广泛使用 HashMap (及其前辈 Hashtable )。理想情况下基于散列的容器提供有效插入和有效检索;直接在对象模式中支持散列可以促进基于散列的容器的开发和使

2008-08-05 18:45:00 461

转载 Java 理论与实践: 性能管理 您有规划吗?

性能管理通常被视为一种巫术,因为性能问题通常在应用程序开发完成之后才会出现。到那时,就难以确定它们的根源。然而,一旦十分准确地确定了性能问题的起因,那么修正它常常是比较简单的事情。工程师在寻找更有效的方法来执行特殊任务方面通常具有相当的创造性(有时他们的创造性过了头)。对于任何给定的性能问题,通过使用高速缓存来减少冗余计算或者只是添加更多的硬件,解决方案可能会与用更有效的算法进行替换一

2008-08-05 16:35:00 398

转载 Java 理论与实践: 变还是不变?

不变对象是指在实例化后其外部可见状态无法更改的对象。Java 类库中的 String 、 Integer 和 BigDecimal 类就是不变对象的示例 ― 它们表示在对象的生命期内无法更改的单个值。 不变性的长处 如果正确使用不变类,它们会极大地简化编程。因为它们只能处于一种状态,所以只要

2008-08-05 16:31:00 551

转载 Java 理论与实践: 您的小数点到哪里去了?

虽然几乎每种处理器和编程语言都支持浮点运算,但大多数程序员很少注意它。这容易理解 ― 我们中大多数很少需要使用非整数类型。除了科学计算和偶尔的计时测试或基准测试程序,其它情况下几乎都用不着它。同样,大多数开发人员也容易忽略 java.math.BigDecimal 所提供的任意精度的小数 ― 大多数应用程序不使用它们。然而,在以整数为主的程序中有时确实会出人意料地需要表示非

2008-08-05 16:24:00 461

转载 智力题

看到一个智力题,做了一会不想没成功,郁闷,看来还是数学功底不够啊。  两个聪明人闲来无事,邀他们的秘书玩这样一个游戏: 秘书在2和100之间选两个数,把和给一个人,乘积给另一个, 让他们算出这两个数。于是有了下面的对话:  - 光凭这个乘积,我算不出来。  - 我已经知道你算不出来。  - 那... 我算出来了。  - 那... 我也算出来了。 聪明的你,是否也算出来了?

2008-08-05 15:09:00 965

转载 java垃圾回收算法一窥

记得部门老大曾经说过,java的垃圾回收机制对于java体系结构的学习非常重要。这里将阅读的一些文献整理总结出来,记述java的几种垃圾回收算法。  垃圾回收算法有两个基本的问题:1.必须检测到垃圾对象。2.必须重新声明被垃圾对象占用的堆空间并且让堆空间可用。  可达性(reachability)  一个对象是可达的,当且仅当从可执行程序的根集开始有引用路径能访问该对象。  根集(

2008-08-05 15:04:00 1249

转载 JAVA API备忘----I/O

java的I/O向来以纷繁复杂著称。如此多的I/O类,以至于在第一次看到是我就一句:mygod,甚至于在用了许多次之后仍然是没有半点概念,下次再用仍然一无所知。的确,是该打压下javaI/O的嚣张气焰了,所以写这篇东西以自勉。关于JAVAI/O,网上也有足够的文章了,比较好的一篇是《彻底明白java的I/O》,整个体系上比较全,今后可以参考。  在开始之前,先记住,java有两个对

2008-08-05 14:42:00 718

转载 jive备忘--浅析jive缓存

jive的缓存非常简单,很适合初学者提升功力,这里将jive缓存几个关键的地方拿出来与大家分享一下。  首先,让我们对jive缓存的类库有个框架性认识,如图:   上图所列的,就是jive实现缓存所用的几个关键类。主要包括Cache,Cacheable,CacheObject,LinkedList以及和此类似的一整套Long的Cache类。现在把以上每个功能分别叙述一下。L

2008-08-05 14:42:00 672

转载 JAVA API备忘----Thread

JAVA的线程是一个既简单又复杂的概念。说它简单,是因为JAVA在语言级就内置了线程,使得线程的编程相对其它语言来说要简单得多;另一方面,线程编程本身就很复杂,无论再怎么去简化,总离不开并发、通信等概念,而这些东西就有复杂性。  JAVA线程编程涉及的变化比较多,但是总结下来,基本上都是对基础知识的深入应用。本文不打算介绍每本书都必写的东西,而是试图强调一些比较重要而又需要深入理解的基础概

2008-08-05 14:41:00 933

转载 JAVA API备忘----String

有些面试经验都会发现目前市场上大多数公司都喜欢面试字符串处理,诸如字符串倒置,字符串拼接,字符串替换真是层出不穷屡试不爽。之所以会这样是跟计算机处理的对象有密切关系的。现在的计算机越来越专注于处理更多复杂的外界信息,而外界信息在计算机内存放很大部分是以串的形式。这也正是本文讨论的意义所在。  String类是一个比较值得学习的类,不仅因为字符串处理的重要性,还在于这个类用到了许多J

2008-08-05 14:39:00 856

转载 JAVA API备忘----集合

类继承关系图List:List有两个实现类,ArrayList和LinkedList,前者用数组实现,后者用链表实现,关于两者的比较,将会在分析之后给出。ArrayList:先来看看最常用的ArrayList,它继承了AbstractList,实现了List,RandomAccess, Cloneable, Serializable四个接口。常常听见ArrayList是用数组实

2008-08-05 14:37:00 1121

转载 Java 理论与实践: 线程池与工作队列

贴在我们多线程 Java 编程论坛上最常见的问题之一是“怎样创建线程池?”。几乎在每个服务器应用程序中都会出现线程池和工作队列问题。本文中,Brian Goetz 探讨了线程池的动机、一些基本实现和调优技术以及一些要避免的常见危险。 为什么要用线程池? 诸如 Web服务器、数据库服务器、文件服务器或邮件服务器之类的许多服务器应用程序都

2008-08-05 14:34:00 704

转载 jdk concurrent threadPool---ThreadPoolExecutor原理分析

线程池   线程池是管理线程的高级技术,通常它提供了如下功能: 通过对线程的管理,更加合理的调配资源。通常,线程池里维护着一组空闲线程,并向外提供,根据系统繁忙程度动态增加或减少空闲线程的数量。比较高级的还提供了自动检测异常线程的功能。 通过维护池中既存线程,可以节省创建线程的开销,尤其是对于webserver这类处理频繁,而处理过程又比较快的程序,创建线程的开销是

2008-08-05 14:33:00 4507

转载 线程高级---线程的一些编程技巧

对于线程的编程,同步已经不在算什么技巧了,而是基础。所以在阅读本篇之前,希望对同步有很深刻的认识。而本篇是朝着技巧来的,将会在今后的阐述中以此为主线将一些简单但常见的线程编程问题解释一下。         1.提高性能的技巧。     这里主要介绍几个提高性能的多线程编程技巧,适当的使用它们将会让多线程程序快很多。    1)在阐述之前,先看看s

2008-08-05 14:32:00 1194

转载 线程高级---异步线程

   异步线程是多线程编程中比较重要的编程方法。记得编写过.net的socket,提供的编程模式与传统的多线程socket编程方式不同,很长时间也没搞清楚,的确,单凭异步这个词去理解它是稍微难了些。不妨再次使用这个socket做例子来解释异步线程。   我需要做的是编写一个服务器,接受多个客户端的请求并根据需要返回数据。.net的socket是这样来做的:首先,起一个线程listene

2008-08-05 14:31:00 12984

转载 线程高级---读写锁

读写锁问题也是比较常见的问题,这是因为现实中充斥着这类问题,而读者写者问题是单纯synchronized的进化版,之所以这么说,是因为它将锁分为读锁和写锁,通过读锁之间的并发性和写锁的排他性从而极大的提升性能。    在开始之前,还是先来回顾一下读写锁问题。一个数据文件或记录能被多个线程共享。有些线程要求读,而另一些则要求写或修改。允许多个读线程同时读一个共享对象,因为读操作不会使数据

2008-08-05 14:30:00 2957

转载 线程高级---生产者消费者问题

说到生产者消费者问题,大部分人都不会陌生,OS课的经典问题,并且其本身就是一个计算机编程中常见的问题。可以说既是难点又是重点。对于它的应用,可以举出无数的例子,小到一个多线程程序对队列的共享互斥操作,大到目前流行的中间件产品,诸如BEA的BMQ(BEAMessage Queue),IBM的MQSerious等中间件就是将生产者消费者问题应用通用化体系化的结果。    在开始之前

2008-08-05 14:25:00 1129

转载 jdk concurrent collection---ConcurrentLinkedQueue原理分析

先来回顾之前提到过的ConcurrentHashMap,它是一个以Concurrent开头的并发集合类,其原理是通过增加锁和细化锁的粒度来提高并发度。  另一个值得一提的Concurrent是ConcurrentLinkedQueue。这个类采用了另一种提高并发度的方式:非阻塞算法(Non-blocking),第一次实现了无锁的并发。 谈到这里,先要介绍一下非阻塞算法。其实非阻塞算

2008-08-05 14:21:00 1280

转载 一个关于Java数据类型的有趣问题

猜猜下面几条语句会输出什么?           Integer i1 = 100;           Integer i2 = 100;           Integer i3 = 1000;           Integer i4 = 1000;           System.out.println(i1==i2);           System.ou

2008-08-05 13:52:00 535

转载 JDK 5.0中的并发-----整理自IBM-900

概述:JDK 5.0 是用 Java 语言创建高可伸缩的并发应用程序的主要步骤。JVM 已经进行了改进,允许类利用硬件级别支持并发,并且提供了一组丰富的新并发构造块,使开发并发应用程序更加容易。 本教程将介绍 JDK 5.0 提供的用于并发的新实用程序类,并通过与现有并发原语(synchronized、wait() 和 notify())相比较,说明这些类如何提高了可伸缩性。 虽然本文档针对于各个

2008-08-05 13:19:00 1362

转载 jdk concurrent collection---ConcurrentHashMap原理分析

集合是编程中最常用的数据结构。而谈到并发,几乎总是离不开集合这类高级数据结构的支持。比如两个线程需要同时访问一个中间临界区(Queue),比如常会用缓存作为外部文件的副本(HashMap)。这篇文章主要分析jdk1.5的3种并发集合类型(concurrent,copyonright,queue)中的ConcurrentHashMap,让我们从原理上细致的了解它们,能够让我们在深度项目开

2008-08-05 13:08:00 859

转载 构建可扩展的Java EE应用(二)

原文地址:http://www.theserverside.com/tt/articles/article.tss?l=ScalingYourJavaEEApplicationsPart2当并发用户数明显的开始增长,你可能会不满意一台机器所能提供的性能,或者由于单个JVM实例gc的限制,你没法扩展你的java应用,在这样的情况下你可以做的另外的选择是在多个JVM实例或多台服务器上运行你的系

2008-08-05 11:51:00 653

转载 构建可扩展的Java EE应用(一)

原文地址: http://www.theserverside.com/tt/articles/article.tss?l=ScalingYourJavaEEApplications对于一个具备使用价值的应用而言,其使用者有可能会在一段时间内疯狂的增长。随着越来越多的关键性质的应用在JavaEE上运行,很多的Java开发者也开始关注可扩展性的问题了。但目前来说,大部分的web2.0站

2008-08-05 11:50:00 570

转载 JDBC基础知识

JDBC是由一系列连接(Connection)、SQL语句(Statement)和结果集(ResultSet)构成的,其主要作用概括起来有如下3个方面:    建立与数据库的连接。    向数据库发起查询请求。    处理数据库返回结果。     这些作用是通过一系列API实现的,其中的几个重要接口如表13-1所示。

2008-08-05 11:48:00 653

转载 六种异常处理的陋习

你觉得自己是一个Java专家吗?是否肯定自己已经全面掌握了Java的异常处理机制?在下面这段代码中,你能够迅速找出异常处理的六个问题吗? 1 OutputStreamWriter out = ... 2 java.sql.Connection conn = ... 3 try { // ⑸ 4  Statement stat = conn.createStatement(); 5  ResultS

2008-08-05 11:46:00 435

转载 深入研究Servlet线程安全性问题

Servlet/JSP技术和ASP、PHP等相比,由于其多线程运行而具有很高的执行效率。由于Servlet/JSP默认是以多线程模式执行的,所以,在编写代码时需要非常细致地考虑多线程的安全性问题。然而,很多人编写Servlet/JSP程序时并没有注意到多线程安全性的问题,这往往造成编写的程序在少量用户访问时没有任何问题,而在并发用户上升到一定值时,就会经常出现一些莫明其妙的问题。  Ser

2008-08-04 14:44:00 399

转载 关于servlet线程安全问题

Servlet/JSP技术和ASP、PHP等相比,由于其多线程运行而具有很高的执行效率。由于Servlet/JSP默认是以多线程模式执行的,所以,在编写代码时需要非常细致地考虑多线程的安全性问题。然而,很多人编写Servlet/JSP程序时并没有注意到多线程安全性的问题,这往往造成编写的程序在少量用户访问时没有任何问题,而在并发用户上升到一定值时,就会经常出现一些莫明其妙的问题。       

2008-08-04 14:41:00 601

转载 Servlet及JSP中的多线程同步问题

Servlet/JSP技术和ASP、PHP等相比,由于其多线程运行而具有很高的执行效率。由于Servlet/JSP默认是以多线程模式执行的,所以,在编写代码时需要非常细致地考虑多线程的同步问题。然而,很多人编写Servlet/JSP程序时并没有注意到多线程同步的问题,这往往造成编写的程序在少量用户访问时没有任何问题,而在并发用户上升到一定值时,就会经常出现一些莫明其妙的问题,对于这类随

2008-08-04 14:39:00 430

转载 [转贴] Java 理论和实践: 了解泛型

表面上看起来,无论语法还是应用的环境(比如容器类),泛型类型(或者泛型)都类似于 C++ 中的模板。但是这种相似性仅限于表面,Java 语言中的泛型基本上完全在编译器中实现,由编译器执行类型检查和类型推断,然后生成普通的非泛型的字节码。这种实现技术称为擦除(erasure)(编译器使用泛型类型信息保证类型安全,然后在生成字节码之前将其清除),这项技术有一些奇怪,并且有时会带来一些令人迷惑的后果

2008-08-01 14:13:00 390

转载 [转贴] Java 理论与实践: 使用通配符简化泛型使用

自从泛型被添加到 JDK 5 语言以来,它一直都是一个颇具争议的话题。一部分人认为泛型简化了编程,扩展了类型系统从而使编译器能够检验类型安全;另外一些人认为泛型添加了很多不必要的复杂性。对于泛型我们都经历过一些痛苦的回忆,但毫无疑问通配符是最棘手的部分。 通配符基本介绍 泛型是一种表示类或方法行为对于未知类型的类型约束的方法,比如 “不管这个方法

2008-08-01 14:12:00 511

转载 [转贴] Java 理论与实践: 使用通配符简化泛型使用

在 Java 语言中,数组是协变的(因为一个 Integer 同时也是一个 Number,一个 Integer 数组同时也是一个 Number 数组),但是泛型不是这样的(List 并不等于 List)。人们会争论哪些选择是 “正确的”,哪些选择是 “错误的” — 当然,每种选择都各有优缺点

2008-08-01 13:57:00 515

空空如也

空空如也

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

TA关注的人

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