- 博客(94)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
转载 JAVA补充列表
为什么Java的string类要设成对象,其他的基本类型为什么不是对象Java的可变类与不可变类 Java移位运算符接口和抽象类的区别Java中的clone()和cloneable接口浅析正确的理解this 和 super让人头疼的"相等"关系
2013-07-11 11:30:12
576
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
转载 Java系列教程目录表
Java基础知识包括:1.概念以及提纲(JVM运行原理、Java注释)2.语言基础3.数据类型[一部分]4.操作符5.控制流程6.关键字清单Java类和对象包括:1.基本概念2.Java变量相关1)Java变量分类2)Java中变量的初始化3)Java变量修饰符和访问域4)Java类修饰符[不包含内部类]3.Java涉及OO的
2013-07-07 09:17:25
5287
转载 Java反射机制
Reflection是Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说"自审",并能直接操作程序的内部属性。例如,使用它能获得 Java 类中各成员的名称并显示出来。 Java 的这一能力在实际应用中也许用得不是很多,但是在其它的程序设计语言中根本就不存在这一特性。例如,Pascal、C 或者 C++ 中就没有办法在程序中获得函数定义相关的信息。JavaB
2013-08-13 14:05:15
634
转载 Java的动态绑定
运行时绑定也叫动态绑定,它是一种调用对象方法的机制。Java调用对象方法时,一般采用运行时绑定机制。1.Java的方法调用过程编译器查看对象的声明类型和方法名(对象变量的声明类型)。通过声明类型找到方法列表。编译器查看调用方法时提供的参数类型。如果方法是private、static、final或者构造器,编译器就可以确定调用那个方法。这是静态绑定。如果不是上述情况,就要使用运行
2013-07-28 17:34:21
646
转载 什么是接口回调?
1.接口回调是什么?接口回调是指:可以把使用实现了某一接口的类创建的对象的引用赋给该接口声明的接口变量,那么该接口变量就可以调用被类实现的接口的方法。实际上,当接口变量调用被类实现的接口中的方法时,就是通知相应的对象调用接口的方法,这一过程称为对象功能的接口回调。看下面示例。interface People { void peopleList(); }
2013-07-25 15:08:37
1264
转载 Java反射机制
反射,reflection,听其名就像照镜子一样,可以看见自己也可以看见别人的每一部分。在java语言中这是一个很重要的特性。下面是来自sun公司官网关于反射的介绍: Reflection is a feature in the Java programming language. It allows an executing Java program to examine
2013-07-24 17:18:09
727
转载 Java的深拷贝和浅拷贝
熟悉C++的朋友对这个话题应该很熟悉,浅拷贝就是指两个对象共同拥有同一个值,一个对象改变了该值,也会影响到另一个对象。深拷贝就是两个对象的值相等,但是互相独立。本来想把以前写的一篇文章扩充一下,没想到居然牵扯出很多复杂的问题。本文测试环境是windows xp sp3中文版、NetBeans6.7.1,JDK1.6-update16。这里抛砖引玉,希望大家能提宝贵意见。 首先,Jav
2013-07-24 16:03:35
579
转载 深入 HashCode 方法
Go deep into HashCode为什么HashCode对于对象是如此的重要?一个对象的HashCode就是一个简单的Hash算法的实现,虽然它和那些真正的复杂的Hash算法相比还不能叫真正的算法,它如何实现它,不仅仅是程序员的编程水平问题,而是关系到你的对象在存取是性能的非常重要的关系.有可能,不同的HashCode可能会使你的对象存取产生,成百上千倍的性能差别.
2013-07-24 08:53:23
505
转载 类与类关系的UML图与代码表现
类与类之间的关系对于理解面向对象具有很重要的作用,以前在面试的时候也经常被问到这个问题,在这里我就介绍一下。类与类之间存在以下关系:(1)泛化(Generalization)(2)关联(Association)(3)依赖(Dependency)(4)聚合(Aggregation)UML图与应用代码例子:1.泛化(Generalization)[泛化]表示类与
2013-07-21 09:57:00
649
转载 hashCode与equals的区别与联系
一、equals方法的作用 1、默认情况(没有覆盖equals方法)下equals方法都是调用Object类的equals方法,而Object的equals方法主要用于判断对象的内存地址引用是不是同一个地址(是不是同一个对象)。2 、要是类中覆盖了equals方法,那么就要根据具体的代码来确定equals方法的作用了,覆盖后一般都是通过对象的内容是否相等来判断对象是否相
2013-07-13 15:35:07
664
转载 equals方法和hashCode方法详解
一、初识equals()和hashCode()方法 1、首先需要明确知道的一点是:hashCode()方法和equals()方法是在Object类中就已经定义了的,所以在java中定义的任何类都会有这两个方法。原始的equals()方法用来比较两个对象的地址值,而原始的hashCode()方法用来返回其所在对象的物理地址,下面来看一下在Object中的定义:equals:
2013-07-13 15:32:53
604
转载 Java中的深拷贝和浅拷贝
简评:浅拷贝clone只是将当前对象实现clonable接口,覆盖clone方法,而深拷贝则是不仅将当前对象clone,而且将其涉及到的其它引用对象也进行clone调用。 做项目时,可能会碰到这样的一个问题,就是需要把一个对象的属性完全拷贝到另一个对象上.当这个对象是个简单对象(即属性不包括对其他对象的引用)时用浅拷贝来完成对象的拷贝.即在实体类中实现Clonable接
2013-07-13 11:22:09
550
转载 哪个对象才是锁?
我们都知道当一个线程试图访问同步代码块时,它首先必须得到锁,退出或抛出异常时必须释放锁。这些基础也许大家都知道,但是很多人还是搞不清哪个对象才是锁?如果你能正确回答以下问题,那么才算你彻底搞明白了哪个对象才是锁?静态同步方法问题如下代码是两个静态同步方法01Class A{02
2013-07-13 11:08:08
658
转载 Java中的读/写锁
原文链接 作者:Jakob Jenkov 译者:微凉 校对:丁一相比Java中的锁(Locks in Java)里Lock实现,读写锁更复杂一些。假设你的程序中涉及到对一些共享资源的读和写操作,且写操作没有读操作那么频繁。在没有写操作的时候,两个线程同时读一个资源没有任何问题,所以应该允许多个线程能在同时读取共享资源。但是如果有一个线程想去写这些共享资源,就不应该再有其它线程对该资源进行读
2013-07-13 10:35:17
910
转载 剖析同步器
原文链接 作者:Jakob Jenkov 译者:丁一虽然许多同步器(如锁,信号量,阻塞队列等)功能上各不相同,但它们的内部设计上却差别不大。换句话说,它们内部的的基础部分是相同(或相似)的。了解这些基础部件能在设计同步器的时候给我们大大的帮助。这就是本文要细说的内容。注:本文的内容是哥本哈根信息技术大学一个由Jakob Jenkov,Toke Johansen和Lars Bjørn
2013-07-13 09:56:20
680
转载 线程池
原文地址:jenkov 作者: Jakob Jenkov 译者:长源 校对:方腾飞线程池(Thread Pool)对于限制应用程序中同一时刻运行的线程数很有用。因为每启动一个新线程都会有相应的性能开销,每个线程都需要给栈分配一些内存等等。我们可以把并发执行的任务传递给一个线程池,来替代为每个并发执行的任务都启动一个新的线程。只要池里有空闲的线程,任务就会分配给一个线程执行
2013-07-13 09:54:13
590
转载 阻塞队列
原文地址 By Jakob Jenkov 翻译:寒桐 校对:方腾飞阻塞队列与普通队列的区别在于,当队列是空的时,从队列中获取元素的操作将会被阻塞,或者当队列是满时,往队列里添加元素的操作会被阻塞。试图从空的阻塞队列中获取元素的线程将会被阻塞,直到其他的线程往空的队列插入新的元素。同样,试图往已满的阻塞队列中添加新元素的线程同样也会被阻塞,直到其他的线程使队列重新变得空闲起来,如从
2013-07-13 09:53:06
830
转载 信号量
原文地址 By Jakob Jenkov 翻译:寒桐 校对:方腾飞Semaphore(信号量) 是一个线程同步结构,用于在线程间传递信号,以避免出现信号丢失(译者注:下文会具体介绍),或者像锁一样用于保护一个关键区域。自从5.0开始,jdk在java.util.concurrent包里提供了Semaphore 的官方实现,因此大家不需要自己去实现Semaphore。但是还是很有必
2013-07-13 09:51:43
633
转载 重入锁死
原文链接 作者:Jakob Jenkov 译者:刘晓日 校对:丁一重入锁死与死锁和嵌套管程锁死非常相似。锁和读写锁两篇文章中都有涉及到重入锁死的问题。当一个线程重新获取锁,读写锁或其他不可重入的同步器时,就可能发生重入锁死。可重入的意思是线程可以重复获得它已经持有的锁。Java的synchronized块是可重入的。因此下面的代码是没问题的:(译者注:这里提到的锁都是指的不
2013-07-13 09:49:51
702
转载 Java中的锁
原文链接 作者:Jakob Jenkov 译者:申章 校对:丁一锁像synchronized同步块一样,是一种线程同步机制,但比Java中的synchronized同步块更复杂。因为锁(以及其它更高级的线程同步机制)是由synchronized同步块的方式实现的,所以我们还不能完全摆脱synchronized关键字(译者注:这说的是Java 5之前的情况)。自Java 5开始,ja
2013-07-13 09:48:11
822
转载 Slipped Conditions
原文链接 作者:Jakob Jenkov 译者:余绍亮 校对:丁一所谓Slipped conditions,就是说, 从一个线程检查某一特定条件到该线程操作此条件期间,这个条件已经被其它线程改变,导致第一个线程在该条件上执行了错误的操作。这里有一个简单的例子:01public class Lock {02
2013-07-12 10:03:10
548
转载 嵌套管程锁死
原文链接 作者:Jakob Jenkov译者:余绍亮 校对:丁一嵌套管程锁死类似于死锁, 下面是一个嵌套管程锁死的场景:线程1获得A对象的锁。线程1获得对象B的锁(同时持有对象A的锁)。线程1决定等待另一个线程的信号再继续。线程1调用B.wait(),从而释放了B对象上的锁,但仍然持有对象A的锁。线程2需要同时持有对象A和对象B的锁,才能向线程1发信号。
2013-07-12 10:00:30
704
转载 饥饿和公平
原文地址 By Jakob Jenkov 翻译 Simon-SZ 校对:方腾飞如果一个线程因为CPU时间全部被其他线程抢走而得不到CPU运行时间,这种状态被称之为“饥饿”。而该线程被“饥饿致死”正是因为它得不到CPU运行时间的机会。解决饥饿的方案被称之为“公平性” – 即所有线程均能公平地获得运行机会。 下面是本文讨论的主题:1. Java中导致饥饿的原因:
2013-07-12 09:54:27
648
转载 避免死锁
原文链接 作者:Jakob Jenkov译者:申章 校对:丁一在有些情况下死锁是可以避免的。本文将展示三种用于避免死锁的技术:加锁顺序加锁时限死锁检测加锁顺序当多个线程需要相同的一些锁,但是按照不同的顺序加锁,死锁就很容易发生。如果能确保所有的线程都是按照相同的顺序获得锁,那么死锁就不会发生。看下面这个例子:Thread
2013-07-12 09:52:46
1058
转载 死锁
原文链接 作者:Jakob Jenkov 译者:申章 校对:丁一死锁是两个或更多线程阻塞着等待其它处于死锁状态的线程所持有的锁。死锁通常发生在多个线程同时但以不同的顺序请求同一组锁的时候。例如,如果线程1锁住了A,然后尝试对B进行加锁,同时线程2已经锁住了B,接着尝试对A进行加锁,这时死锁就发生了。线程1永远得不到B,线程2也永远得不到A,并且它们永远也不会知道发生了这样的事情。为
2013-07-12 09:52:22
781
转载 线程通信
原文链接 作者:Jakob Jenkov译者:杜建雄 校对:方腾飞线程通信的目标是使线程间能够互相发送信号。另一方面,线程通信使线程能够等待其他线程的信号。例如,线程B可以等待线程A的一个信号,这个信号会通知线程B数据已经准备好了。本文将讲解以下几个JAVA线程间通信的主题:1、通过共享对象通信2、忙等待3、wait(),notify()和not
2013-07-12 09:50:56
641
转载 Java同步块
原文链接 作者:Jakob Jenkov 译者:李同杰Java 同步块(synchronized block)用来标记方法或者代码块是同步的。Java同步块用来避免竞争。本文介绍以下内容:Java同步关键字(synchronzied)实例方法同步静态方法同步实例方法中同步块静态方法中同步块Java同步示例Java 同步关键字(synchronized)Jav
2013-07-12 09:49:07
620
转载 线程安全及不可变性
原文链接 作者:Jakob Jenkov 译者:高嵩 校对:丁一当多个线程同时访问同一个资源,并且其中的一个或者多个线程对这个资源进行了写操作,才会产生竞态条件。多个线程同时读同一个资源不会产生竞态条件。我们可以通过创建不可变的共享对象来保证对象在线程间共享时不会被修改,从而实现线程安全。如下示例:01public class Imm
2013-07-12 09:47:46
647
转载 线程安全与共享资源
原文链接 作者:Jakob Jenkov 译者:毕冉 校对:丁一允许被多个线程同时执行的代码称作线程安全的代码。线程安全的代码不包含竞态条件。当多个线程同时更新共享资源时会引发竞态条件。因此,了解Java线程执行时共享了什么资源很重要。局部变量局部变量存储在线程自己的栈中。也就是说,局部变量永远也不会被多个线程共享。所以,基础类型的局部变量是线程安全的。下面是基础类
2013-07-12 09:46:49
618
转载 竞态条件与临界区
原文链接 作者:Jakob Jenkov 译者:He Jianjun 校对:丁一在同一程序中运行多个线程本身不会导致问题,问题在于多个线程访问了相同的资源。如,同一内存区(变量,数组,或对象)、系统(数据库,web services等)或文件。实际上,这些问题只有在一或多个线程向这些资源做了写操作时才有可能发生,只要资源没有发生变化,多个线程读取相同的资源就是安全的。多
2013-07-12 09:46:05
663
转载 如何创建并运行java线程
原文链接 译者:章筱虎 校对:方腾飞Java线程类也是一个object类,它的实例都继承自java.lang.Thread或其子类。 可以用如下方式用java中创建一个线程:1Tread thread = new Thread();执行该线程可以调用该线程的start()方法:1
2013-07-12 09:44:59
629
转载 多线程的代价
原文链接:http://tutorials.jenkov.com/java-concurrency/costs.html作者:Jakob Jenkov 翻译:古圣昌 校对:欧振聪从一个单线程的应用到一个多线程的应用并不仅仅带来好处,它也会有一些代价。不要仅仅为了使用多线程而使用多线程。而应该明确在使用多线程时能多来的好处比所付出的代价大的时候,才使用多线程。如
2013-07-12 09:44:00
560
转载 多线程的优点
原文:http://tutorials.jenkov.com/java-concurrency/benefits.html作者:Jakob Jenkov 翻译:古圣昌 校对:欧振聪尽管面临很多挑战,多线程有一些优点使得它一直被使用。这些优点是:资源利用率更好程序设计在某些情况下更简单程序响应更快资源利用率更好
2013-07-12 09:43:16
722
转载 Java并发性和多线程介绍
http://tutorials.jenkov.com/java-concurrency/index.html在过去单CPU时代,单任务在一个时间点只能执行单一程序。之后发展到多任务阶段,计算机能在同一时间点并行执行多任务或多进程。虽然并不是真正意义上的“同一时间点”,而是多个任务或进程共享一个CPU,并交由操作系统来完成多任务间对CPU的运行切换,以使得每个任务都有机会获得一定的时间片运
2013-07-12 09:42:47
643
转载 聊聊并发(六)ConcurrentLinkedQueue的实现原理分析
1. 引言在并发编程中我们有时候需要使用线程安全的队列。如果我们要实现一个线程安全的队列有两种实现方式一种是使用阻塞算法,另一种是使用非阻塞算法。使用阻塞算法的队列可以用一个锁(入队和出队用同一把锁)或两个锁(入队和出队用不同的锁)等方式来实现,而非阻塞的实现方式则可以使用循环CAS的方式来实现,本文让我们一起来研究下Doug Lea是如何使用非阻塞的方式来实现线程安全队列Concu
2013-07-12 09:39:18
620
1
转载 聊聊并发(五)原子操作的实现原理
1 引言原子(atom)本意是“不能被进一步分割的最小粒子”,而原子操作(atomic operation)意为”不可被中断的一个或一系列操作” 。在多处理器上实现原子操作就变得有点复杂。本文让我们一起来聊一聊在Inter处理器和Java里是如何实现原子操作的。2 术语定义术语名称英文解释缓存行Cache
2013-07-12 09:37:44
625
转载 聊聊并发(四)深入分析ConcurrentHashMap
术语定义术语英文解释哈希算法hash algorithm是一种将任意内容的输入转换成相同长度输出的加密方式,其输出被称为哈希值。 哈希表hash table根据设定的哈希函数H(key)和处理冲突方法将一组关键字映象到一个有限的地址区间上,并以关键字在地址区间中的象作为记录在表中的存储位置,这种表称
2013-07-12 09:35:44
618
转载 聊聊并发(三)Java线程池的分析和使用
1. 引言合理利用线程池能够带来三个好处。第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。第三:提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。但是要做到合理的利用线程池,必须对其原理了如指掌。
2013-07-12 09:32:26
507
转载 聊聊并发(二)Java SE1.6中的Synchronized
1 引言在多线程并发编程中Synchronized一直是元老级角色,很多人都会称呼它为重量级锁,但是随着Java SE1.6对Synchronized进行了各种优化之后,有些情况下它并不那么重了,本文详细介绍了Java SE1.6中为了减少获得锁和释放锁带来的性能消耗而引入的偏向锁和轻量级锁,以及锁的存储结构和升级过程。2 术语定义术语英文说
2013-07-12 09:30:46
520
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人