![](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 · 77 阅读 · 0 评论 -
JAVA IO结构图
图1 http://blog.sina.com.cn/s/blog_855ce96b0100vr7r.html 流是一个很形象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接。类似的,当程序需要写入数据的时候,就会开启一个通向目的地的流。这时候你就可以想象数据好像在这其中“流”动一样. 总体来说,...原创 2012-02-05 16:00:30 · 113 阅读 · 0 评论 -
对象序列化
当你创建对象时,只要你需要,它就会一直存在,但是在程序终止时,无论如何它都不会继续存在。如果对象能 够在程序不运行的情况下仍然存在并保存其信息,那将非常有用。这样,在下一次运行程序时,该对象将被重建 并且拥有的信息与在程序上次运行时它所拥有的信息相同。当然,可以通过将对象信息写入文件或是数据库来达 到相同的效果,但是在使万物都成为对象的精神中,如果能够将一个对象声明为是持久性的,并为我们处理...原创 2012-02-06 17:49:14 · 68 阅读 · 0 评论 -
第21章 并发
1.基本上所有的并非模式在解决线程冲突问题时,都是采用序列化访问共享资源的方法。这种加锁访问机制,常常称为“互斥量”。 2.共享资源一般是以对象形式存在的内存片段,但也可以是文件,输入输出端口,或者打印机等。 3.所有对象都自动含有单一的锁(也称为监视器)。当在对象上调用其任意synchronized方法时,此对象就会被加锁。此时,不管是其它线程不管是调用对象的该同步方法,还是调用其它...原创 2012-02-22 17:39:30 · 87 阅读 · 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 · 71 阅读 · 0 评论 -
死锁的问题
1.某个任务在等待另个任务,而后者有等待别的任务,这样一直下去,直到这个链条上的任务又在等待第一个任务释放锁,这种现象就称为死锁。 2.当以下四个条件同时满足时,就会发生死锁: (1)互斥条件:线程使用的资源中至少有一个是不能共享的。这里,一根筷子一次就只能被一个哲学家使用。 (2)至少有一个进程持有一个资源,并且它在等待获取一个当前被别的进程持有的资源。也就是说,要发生死锁,哲学家必须...原创 2012-02-29 15:35:08 · 72 阅读 · 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 · 82 阅读 · 0 评论 -
第10章内部类
一、概述 package com.test; /** * * 可以将一个类的定义放在另一个类的内部,这就是内部类。 * * 在拥有外部类对象之前是不可能创建内部类对象的。 * 但是,如果创建的是嵌套类(静态内部类),就不需要外部类对象了。 * @author Administrator * */ public class Parcel2 {...原创 2012-07-05 00:40:41 · 108 阅读 · 0 评论 -
final变量
final变量必须被初始化,不管是静态的还是非静态的,初始化的方法有: 1.在定义处初始化; 2.非静态的final可以在实例化块中初始化,不能在静态的块中初始化; 3.静态的final可以在静态的实例化块中初始化,不能在实例化中初始化; 4.可以在构造函数中初始化,但是静态的final不行; final修饰的方法不能被子类重写; final修饰的类不能被继承;...原创 2012-07-07 10:47:53 · 93 阅读 · 0 评论 -
第20章注解
1.注解也被称为元数据,它把元数据与源代码文件结合在一起,而不是保存在外部文档中。它可以用来完整地描述程序所需要的信息,而这个信息是无法用java来表达的。 2.定义注解 @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface Test {} 上面就是注解的定义,很像接口,...原创 2012-03-03 11:32:53 · 176 阅读 · 0 评论 -
第18章IO系统
1. File类既能代表一个文件,也能代表某个目录下文件和子目录的集合。 java.io Interface FilenameFilter接口的相关方法 1)accept boolean accept(File dir, String name) Tests if a specified file should be included...原创 2012-02-03 18:11:34 · 118 阅读 · 0 评论 -
第17章容器深入研究
1.List接口的相关方法 1)toArray Object[] 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 · 65 阅读 · 0 评论 -
volatile
以前就看到过Volatile关键字, 只知道跟多线程同步有关, 但一直没去过问具体的含义。 今天想了起来, 查找了一下Volatile相关资料。 就理解而言,看这篇文章就足够了: http://www.ibm.com/developerworks/cn/java/j-jtp06197.html 以下我还是做一下自问自答,以示学习和理解的过程。 一、什么是Volatile...原创 2010-10-09 09:08:24 · 63 阅读 · 0 评论 -
Interrupt
interrupt()只是改变中断状态而已 interrupt()不会中断一个正在运行的线程。这一方法实际上完成的是,在线程受到阻塞时抛出一个中断信号,这样线程就得以退出阻塞的状态。更确切的说,如果线程被Object.wait, Thread.join和Thread.sleep三种方法之一阻塞,那么,它将接收到一个中断异常(InterruptedException),从而提早地终结被阻...原创 2010-11-01 20:36:14 · 65 阅读 · 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 · 103 阅读 · 0 评论 -
第14章类型信息
1.类是程序的一部分,每个类都有一个Class对象。该Class对象被保存在一个同名的.class文件中。 2.Class对象包含了与类有关的信息,Class对象用于创建类的所有“常规”对象。 3.jvm通过类加载器这个子系统来加载要用到的类。 4.所有的类都是在对其第一次使用时,动态加载到jvm中的。当程序创建第一个对类的静态成员的引用时,就会加载这个类。这个证明构造器也是静态方法...原创 2012-01-16 15:27:19 · 120 阅读 · 0 评论 -
第16章数组
1.数组和其他容器相比是一种效率最高的存储和随机访问对象的方式,但是它的缺点是大小被固定。 2.数组可以持有基本类型,而泛型之前的容器则不能 3.无论使用什么类型的数组,数组标识符其实只是一个引用,指向在堆中创建的一个真实对象,这个对象用于保存指向其他对象的引用。对象数组和基本类 型数组在使用上几乎是相同的,唯一的区别就是对象数组保存的是引用,基本类型数组保存基本类型的值。下面是...原创 2012-01-29 17:56:02 · 66 阅读 · 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 · 207 阅读 · 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 · 87 阅读 · 0 评论 -
第11章持有对象
1.向上转型也可作用于泛型(当指定了某个确切类型作为类型参数时,不仅可以使用该确切类型,还可以使用该类型的子类类型) 2.容器分为Collection和Map两大类 (1)Collection,是一个元素序列,这些元素都服从一条或多条规则。list必须按照插入的顺序保存元素,Set不能有重复元素 (2)Map,表示一组成对的“键值对”对象。 3.所有的Collection都...原创 2012-02-01 17:52:44 · 154 阅读 · 0 评论 -
第12章 异常处理
1.Throwable类是所有异常类的基类,Throwable类下面有两个基本类型Error用来表示系统错误,通常用户不用关心,Exception类是运行时抛出异常的基类,是通常用户关心的异常类的基类。 2.Exception类下面又分为RuntimeExcepton和非运行时异常。运行异常都是RuntimeException类及其子类异常,如NullPointerException、Ind...原创 2012-05-22 13:03:50 · 132 阅读 · 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 · 110 阅读 · 0 评论