![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Thinking In Java
文章平均质量分 68
longcxm1
这个作者很懒,什么都没留下…
展开
-
volatile2
在Java中设置变量值的操作,除了long和double类型的变量外都是原子操作,也就是说,对于变量值的简单读写操作没有必要进行同步。 这在JVM 1.2之前,Java的内存模型实现总是从主存读取变量,是不需要进行特别的注意的。而随着JVM的成熟和优化,现在在多线程环境下volatile关键字的使用变得非常重要。 在当前的Java内存模型下,线程可以把变量保存在本...原创 2010-10-09 08:57:45 · 80 阅读 · 0 评论 -
JAVA IO结构图
图1 http://blog.sina.com.cn/s/blog_855ce96b0100vr7r.html 流是一个很形象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接。类似的,当程序需要写入数据的时候,就会开启一个通向目的地的流。这时候你就可以想象数据好像在这其中“流”动一样. 总体来说,...原创 2012-02-05 16:00:30 · 121 阅读 · 0 评论 -
对象序列化
当你创建对象时,只要你需要,它就会一直存在,但是在程序终止时,无论如何它都不会继续存在。如果对象能够在程序不运行的情况下仍然存在并保存其信息,那将非常有用。这样,在下一次运行程序时,该对象将被重建并且拥有的信息与在程序上次运行时它所拥有的信息相同。当然,可以通过将对象信息写入文件或是数据库来达到相同的效果,但是在使万物都成为对象的精神中,如果能够将一个对象声明为是持久性的,并为我们处理...原创 2012-02-06 17:49:14 · 72 阅读 · 0 评论 -
第21章 并发
1.基本上所有的并非模式在解决线程冲突问题时,都是采用序列化访问共享资源的方法。这种加锁访问机制,常常称为“互斥量”。2.共享资源一般是以对象形式存在的内存片段,但也可以是文件,输入输出端口,或者打印机等。3.所有对象都自动含有单一的锁(也称为监视器)。当在对象上调用其任意synchronized方法时,此对象就会被加锁。此时,不管是其它线程不管是调用对象的该同步方法,还是调用其它...原创 2012-02-22 17:39:30 · 92 阅读 · 0 评论 -
生产者消费者
1.class Meal { private final int orderNum; public Meal(int orderNum) { this.orderNum = orderNum; } public String toString() { return "Meal " + orderNum; }}class WaitPerson ...原创 2012-02-29 11:39:25 · 74 阅读 · 0 评论 -
死锁的问题
1.某个任务在等待另个任务,而后者有等待别的任务,这样一直下去,直到这个链条上的任务又在等待第一个任务释放锁,这种现象就称为死锁。2.当以下四个条件同时满足时,就会发生死锁:(1)互斥条件:线程使用的资源中至少有一个是不能共享的。这里,一根筷子一次就只能被一个哲学家使用。(2)至少有一个进程持有一个资源,并且它在等待获取一个当前被别的进程持有的资源。也就是说,要发生死锁,哲学家必须...原创 2012-02-29 15:35:08 · 80 阅读 · 0 评论 -
使用Executor
相关代码:public class CachedThreadPool { public static void main(String[] args) { ExecutorService exec = Executors.newSingleThreadExecutor(); for (int i = 0; i < 5; i++){ exec.execute(new Li...原创 2012-02-29 17:24:23 · 83 阅读 · 0 评论 -
第10章内部类
一、概述 package com.test;/** * * 可以将一个类的定义放在另一个类的内部,这就是内部类。 * * 在拥有外部类对象之前是不可能创建内部类对象的。 * 但是,如果创建的是嵌套类(静态内部类),就不需要外部类对象了。 * @author Administrator * */public class Parcel2 {...原创 2012-07-05 00:40:41 · 119 阅读 · 0 评论 -
final变量
final变量必须被初始化,不管是静态的还是非静态的,初始化的方法有: 1.在定义处初始化;2.非静态的final可以在实例化块中初始化,不能在静态的块中初始化;3.静态的final可以在静态的实例化块中初始化,不能在实例化中初始化;4.可以在构造函数中初始化,但是静态的final不行; final修饰的方法不能被子类重写; final修饰的类不能被继承;...原创 2012-07-07 10:47:53 · 100 阅读 · 0 评论 -
第20章注解
1.注解也被称为元数据,它把元数据与源代码文件结合在一起,而不是保存在外部文档中。它可以用来完整地描述程序所需要的信息,而这个信息是无法用java来表达的。2.定义注解@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public @interface Test {}上面就是注解的定义,很像接口,...原创 2012-03-03 11:32:53 · 180 阅读 · 0 评论 -
第18章IO系统
1.File类既能代表一个文件,也能代表某个目录下文件和子目录的集合。java.ioInterface FilenameFilter接口的相关方法1)acceptboolean accept(File dir, String name) Tests if a specified file should be included...原创 2012-02-03 18:11:34 · 120 阅读 · 0 评论 -
第17章容器深入研究
1.List接口的相关方法1)toArrayObject[] toArray() Returns an array containing all of the elements in this list in proper sequence. Obeys the general contract of the Collection.toArray method. ...原创 2012-02-02 17:47:30 · 68 阅读 · 0 评论 -
volatile
以前就看到过Volatile关键字, 只知道跟多线程同步有关, 但一直没去过问具体的含义。 今天想了起来, 查找了一下Volatile相关资料。 就理解而言,看这篇文章就足够了: http://www.ibm.com/developerworks/cn/java/j-jtp06197.html 以下我还是做一下自问自答,以示学习和理解的过程。 一、什么是Volatile...原创 2010-10-09 09:08:24 · 70 阅读 · 0 评论 -
Interrupt
interrupt()只是改变中断状态而已 interrupt()不会中断一个正在运行的线程。这一方法实际上完成的是,在线程受到阻塞时抛出一个中断信号,这样线程就得以退出阻塞的状态。更确切的说,如果线程被Object.wait, Thread.join和Thread.sleep三种方法之一阻塞,那么,它将接收到一个中断异常(InterruptedException),从而提早地终结被阻...原创 2010-11-01 20:36:14 · 68 阅读 · 0 评论 -
第13章 字符串操作
1.public class Concatenation { public static void main(String[] args) { String mango = "mango"; String s = "abc" + mango + "def" + 47; System.out.println(s); }} 上面这段代码,编译器会自...原创 2011-12-14 23:43:34 · 108 阅读 · 0 评论 -
第14章类型信息
1.类是程序的一部分,每个类都有一个Class对象。该Class对象被保存在一个同名的.class文件中。2.Class对象包含了与类有关的信息,Class对象用于创建类的所有“常规”对象。3.jvm通过类加载器这个子系统来加载要用到的类。4.所有的类都是在对其第一次使用时,动态加载到jvm中的。当程序创建第一个对类的静态成员的引用时,就会加载这个类。这个证明构造器也是静态方法...原创 2012-01-16 15:27:19 · 127 阅读 · 0 评论 -
第16章数组
1.数组和其他容器相比是一种效率最高的存储和随机访问对象的方式,但是它的缺点是大小被固定。2.数组可以持有基本类型,而泛型之前的容器则不能3.无论使用什么类型的数组,数组标识符其实只是一个引用,指向在堆中创建的一个真实对象,这个对象用于保存指向其他对象的引用。对象数组和基本类型数组在使用上几乎是相同的,唯一的区别就是对象数组保存的是引用,基本类型数组保存基本类型的值。下面是...原创 2012-01-29 17:56:02 · 68 阅读 · 0 评论 -
第15章泛型
1.泛型,就是“适用于许多许多类型”的意思。其最初的目的是希望类或方法能够具备最广泛的表达能力。2.类型参数就是用尖括号括住,放在类名后面。在使用这个类的时候,再用实际的类型替换该类型参数,例如:public class Holder3 { private T a; public Holder3(T a) { this.a = a; } public void set...原创 2012-01-30 17:25:26 · 218 阅读 · 0 评论 -
随机数
java.util.Random类1.public Random()//不带种子,每次产生的随机数都不一样 Creates a new random number generator. 2.public Random(long seed)//带种子,每次产生的随机数都是一样的 Creates a new random number generator using...原创 2012-01-31 10:23:35 · 91 阅读 · 0 评论 -
第11章持有对象
1.向上转型也可作用于泛型(当指定了某个确切类型作为类型参数时,不仅可以使用该确切类型,还可以使用该类型的子类类型)2.容器分为Collection和Map两大类(1)Collection,是一个元素序列,这些元素都服从一条或多条规则。list必须按照插入的顺序保存元素,Set不能有重复元素(2)Map,表示一组成对的“键值对”对象。3.所有的Collection都...原创 2012-02-01 17:52:44 · 169 阅读 · 0 评论 -
第12章 异常处理
1.Throwable类是所有异常类的基类,Throwable类下面有两个基本类型Error用来表示系统错误,通常用户不用关心,Exception类是运行时抛出异常的基类,是通常用户关心的异常类的基类。2.Exception类下面又分为RuntimeExcepton和非运行时异常。运行异常都是RuntimeException类及其子类异常,如NullPointerException、Ind...原创 2012-05-22 13:03:50 · 141 阅读 · 0 评论 -
线程类中的同步关键字
public class Constants { public static int syncIntValue = 0; public static int syncIntValueExecCount = 0;}public class MyRun implements Runnable { private String name; ...原创 2012-03-19 17:28:51 · 112 阅读 · 0 评论