
java
文章平均质量分 75
凉秋cds
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Java Set
java.util 中实现 set 接口的常用类主要有三个:HashSetLinkedHashSetTreeSet我一个个来分析。1 Set接口一个不包含重复元素的 collection。更确切地讲,set 不包含满足 e1.equals(e2) 的元素对 e1 和 e2,并且最多包含一个 null 元素。正如其名称所暗示的,此接口模仿了数学上的 set 抽象。2 HashSet此类实现 S原创 2016-03-18 11:23:54 · 373 阅读 · 0 评论 -
java内存溢出
转自:http://baike.baidu.com/link?url=ALoEEdS2E1FMFf_IX2htqy-qpE8amT104tdV47kma3S-uzdwUk_jLFV3hvQykUPccLC2kr40dpeAHmO0fsWWWK内存溢出(out of memory)通俗理解就是内存不够,通常在运行大型软件或游戏时,软件或游戏所需要的内存远远超出了你主机内安装的内存所承受大小,就叫内存溢转载 2016-03-12 13:26:03 · 852 阅读 · 0 评论 -
ConcurrentHashMap原理分析
1 概述(此部分参考:http://www.cnblogs.com/ITtangtang/p/3948786.html)集合是编程中最常用的数据结构。而谈到并发,几乎总是离不开集合这类高级数据结构的支持。比如两个线程需要同时访问一个中间临界区(Queue),比如常会用缓存作为外部文件的副本(HashMap)。这篇文章主要分析jdk1.5的3种并发集合类型(concurrent,copyonright原创 2016-03-24 19:50:33 · 377 阅读 · 0 评论 -
二叉树的前/中/后序遍历
1 前序遍历 // 前序遍历Recursively public void preorderTraversal_R(TreeNode root, ArrayList<Integer> aList) { if (root == null) return; aList.add(root.val); if (root.l原创 2016-03-14 19:11:31 · 500 阅读 · 0 评论 -
java的参数传递
很早就知道java的数据类型分为基本数据类型(int,double,boolen等)和引用数据类型,所有的类对象其实都是一个引用数据类型。如果方法的参数是类对象,那么对其的操作是可以反映到对象本身的;但是如果参数是基础数据类型,在方法中对其的操作没法反映到原数据上。举一个老掉牙的例子:常见错误1public class Main { public static void main(String原创 2016-03-26 17:07:54 · 305 阅读 · 0 评论 -
Thread详解1:守护进程
我认为学习java的最佳资料就是两个东西,一个是其JDK文档,一个就是源码。我们先来看看JDK文档中对于Thread类的描述,下面摘取一些重要信息,然后逐个展开讲解。(JDK文档)线程 是程序中的执行线程。Java 虚拟机允许应用程序并发地运行多个执行线程。每个线程都有一个优先级,高优先级线程的执行优先于低优先级线程。每个线程都可以或不可以标记为一个守护程序。当某个线程中运行的代码创建一个新 Thr原创 2016-03-27 12:08:41 · 1494 阅读 · 0 评论 -
Thread详解2:停止与中断
我们知道线程的start方法,那么,很自然地会想到停止一个线程使用stop,然而stop方法是“过时的”,“不安全”。stop()方法,直接终止线程,释放线程所获的资源,但是在释放过程中会造成对象状态不一致,从而使程序进入未知的境地,已经很久不推荐使用了。所以,Java没有提供一种安全直接的方法来停止某个线程,但是Java提供了中断机制。在这里要着重介绍的是Thread.interrupt() 方法原创 2016-03-27 13:41:04 · 2287 阅读 · 1 评论 -
Thread详解4:线程的优先级
先来瞄一瞄源码。原创 2016-03-27 20:39:48 · 2218 阅读 · 0 评论 -
Thread详解3:线程的状态及几个简单方法
1 线程状态类型新建状态(New):新创建了一个线程对象。就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使用权。运行状态(Running):就绪状态的线程获取了CPU,执行程序代码。阻塞状态(Blocked):阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进入就绪状态,才原创 2016-03-27 19:05:23 · 5445 阅读 · 1 评论 -
Thread详解6:synchronized的使用(二)
1 脏读脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,那么另外一个事务读到的这个数据是脏数据,依据脏数据所做的操作可能是不正确的。我这里提脏读是因为我发现有的朋友因为怕出现脏读而给所有的getValue的操作加锁,但是,这并不总是正确的,因为加锁会降低效率。getValue原创 2016-03-28 21:09:58 · 598 阅读 · 0 评论 -
Thread详解5:synchronized的使用(一)
1 为什么要使用synchronized我们首先编写一个非常简单的多线程的程序,是模拟银行中的多个线程同时对同一个储蓄账户进行存款、取款操作的。 在程序中我们使用了一个简化版本的Account类,代表了一个银行账户的信息。在主程序中我们首先生成了1000个线程,然后启动它们,每一个线程都对John的账户进行存100元,然后马上又取出100元。这样,对于John的账户来说,最终账户的余额应该是还是1原创 2016-03-28 00:39:09 · 644 阅读 · 0 评论 -
Thread详解7:validate
1 validate的作用:validate只能修饰变量,修饰的变量每次被访问的时候都强制从公共堆中去取;而不是从线程的私有数据栈中取得变量的值这里补充说明一点。每个线程都有自己的私用栈,栈内的数据是其他线程不能访问的;堆是所有线程共享的,对象实例都是保存在堆中(当然,严格来讲并不是“所有”)。所以,每当线程要处理一个对象的时候,会先去堆中取到自己的栈中,然后进行运算,再写入到堆中。我暂且把上面的原创 2016-03-29 01:29:37 · 3910 阅读 · 0 评论 -
Macbook上满足apt-get/yum的工具:Homebrew
官网:http://brew.sh/安装:/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"使用:和apt-get类似$ brew install wget安装目录:Homebrew installs packages to their own dire原创 2016-04-28 13:47:40 · 6353 阅读 · 0 评论 -
Java 异常 越界问题
转自:http://blog.sina.com.cn/s/blog_8250c39a0101k4w7.html越界问题一般来说都是数组问题。数组下标不对称。 1.java.lang.ArrayIndexOutOfBoundsException是运行时异常, 编译器是不会知道的,只有运行时jvm才能捕获到.2.jvm为何能捕获到,数组在运行时是由jvm创建的一个东西,是用机器指令创建的。。。 类似于转载 2016-03-11 20:22:16 · 5059 阅读 · 0 评论 -
LinkedHashMap超详细分析
我先笼统地用语言介绍LinkedHashMap,如果看的不是很明白,不要紧,下面会结合源码进行分析。(1)Map 接口的哈希表和链接列表实现,具有可预知的迭代顺序。此实现与 HashMap 的不同之处在于,后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,该迭代顺序通常就是将键插入到映射中的顺序(插入顺序)。(2)注意,如果在映射中重新插入 键,则插入顺序不受影响。(如果在调用原创 2016-03-21 15:28:48 · 7238 阅读 · 0 评论 -
Java Map
public interface Map1 HashMap 和 HashTable*(参考:http://www.cnblogs.com/devinzhang/archive/2012/01/13/2321481.html 和:http://carmen-hongpeng.iteye.com/blog/1706415)*1.1 联系在使用上,除了非同步和允许使用 null 之外,HashMap 类原创 2016-03-19 22:00:24 · 496 阅读 · 0 评论 -
Thread详解8:wait/notify机制
我通过一个问题来引入这篇博文里要介绍的知识点。现在有这样一个需求,内存中有一个容器,容量为5,线程 AddOne 每隔一段时间就往这个容器里反复一个单位的货物,放11个就结束。线程 Supervisor 就是用来监控这个容器的,一旦容器满了,它就将这个容器清空。你的解决方案是什么?1 利用while循环AddOne.javapackage medium2;import java.util.Array原创 2016-03-30 16:25:44 · 1091 阅读 · 0 评论 -
Thread详解9:用wait/notify实现生产者/消费者模式
Storageimport java.util.LinkedList; /** * 仓库类Storage实现缓冲区 */ public class Storage { // 仓库最大存储量 private final int MAX_SIZE = 100; // 仓库存储的载体 private LinkedList<Object> li转载 2016-03-30 18:34:41 · 456 阅读 · 0 评论 -
Thread详解11:ThreadLocal的使用
首先,我们看看JDK文档是怎么描述这个类的:该类提供了线程局部 (thread-local) 变量。这些变量不同于它们的普通对应物,因为访问某个变量(通过其 get 或 set 方法)的每个线程都有自己的局部变量,它独立于变量的初始化副本。ThreadLocal 实例通常是类中的 private static 字段,它们希望将状态与某一个线程(例如,用户 ID 或事务 ID)相关联。每个线程都保持原创 2016-03-31 01:17:21 · 3797 阅读 · 0 评论 -
Thread详解12:InheritableThreadLocal的使用
ThreadLocal的用法可以参考上一篇博文: http://blog.youkuaiyun.com/cds86333774/article/details/51020819,InheritableThreadLocal是ThreadLocal的子类。该类扩展了 ThreadLocal,为子线程提供从父线程那里继承的值:在创建子线程时,子线程会接收所有可继承的线程局部变量的初始值,以获得父线程所具有的值。原创 2016-03-31 02:28:40 · 3008 阅读 · 0 评论 -
Thread详解13:ReentrantLock的用法(一)
Java里面提供了比synchronized更加灵活丰富的锁机制,它们有一个共同的接口Lock,我们先来学习这个接口,了解其协议和功能。下面是JDK文档,总结得非常精炼,包含的知识点非常多,所以一开始可能看不懂,不过没关系,后面一点点弄懂。public interface LockLock 实现提供了比使用 synchronized 方法和语句可获得的更广泛的锁定操作。此实现允许更灵活的结构,可以具原创 2016-03-31 12:35:40 · 5031 阅读 · 2 评论 -
Thread详解14:ReentrantLock的用法(二)
1 lockInterruptibly()如果当前线程未被中断,则获取锁;如果已经被中断则抛出异常。package testReentrantLock;import java.util.concurrent.locks.ReentrantLock;public class TestlockInterruptibly extends Thread { private ReentrantLock原创 2016-03-31 16:40:46 · 937 阅读 · 0 评论 -
Thread详解15:ReentrantReadWriteLock
import java.util.ArrayList;import java.util.Random;import java.util.concurrent.locks.ReentrantReadWriteLock;public class TestReentrantReadWriteLock extends Thread { private ReentrantReadWriteLock原创 2016-03-31 17:25:58 · 423 阅读 · 0 评论 -
Thread详解16:Timer
import java.util.Timer;import java.util.TimerTask;public class M { public static void main(String[] args) { // TODO todo.generated by zoer Timer timer = new Timer(); timer.原创 2016-03-31 17:42:02 · 695 阅读 · 0 评论 -
Thread详解10:用管道进行线程间通信
1 字节流管道通常,数据由某个线程从 PipedInputStream 对象读取,并由其他线程将其写入到相应的 PipedOutputStream。不建议对这两个对象尝试使用单个线程,因为这样可能死锁线程。管道输入流包含一个缓冲区,可在缓冲区限定的范围内将读操作和写操作分离开。 如果向连接管道输出流提供数据字节的线程不再存在,则认为该管道已损坏。1.1 PipedInputStream1.2 Pip原创 2016-03-30 18:41:41 · 637 阅读 · 0 评论 -
Thread详解17:ThreadGroup线程组
线程组表示一个线程的集合。此外,线程组也可以包含其他线程组。线程组构成一棵树,在树中,除了初始线程组外,每个线程组都有一个父线程组。允许线程访问有关自己的线程组的信息,但是不允许它访问有关其线程组的父线程组或其他任何线程组的信息。以及Thread的构造方法我们回顾一下:看完JDK说明文档之后我觉得这个东西并不难,里面的一些方法的用法和说明也很直白,这里就不啰嗦,后面还有更好玩的多线程机制去分享。这里原创 2016-03-31 17:48:56 · 1760 阅读 · 0 评论 -
JAVA字符串格式化
(转自:http://www.cnblogs.com/zhangpengshou/p/3699744.html)1 常规类型的格式化String类的format()方法用于创建格式化的字符串以及连接多个字符串对象。熟悉C语言的同学应该记得C语言的sprintf()方法,两者有类似之处。format()方法有两种重载形式。format(String format, Object… args) 新字符串转载 2016-03-20 00:07:39 · 491 阅读 · 0 评论 -
HashMap的遍历
查看Map接口,我们发现Map提供三种collection视图:键集 Set<> keySet():返回此映射中包含的键的 Set 视图。该 set 受映射支持,所以对映射的更改可在此 set 中反映出来,反之亦然。如果对该 set 进行迭代的同时修改了映射(通过迭代器自己的 remove 操作除外),则迭代结果是不确定的。set 支持元素移除,通过 Iterator.remove、 Set.re原创 2016-03-20 01:55:57 · 504 阅读 · 0 评论 -
Java中的位操作
1 机器码要进行位操作,首先得了解数据以二进制保存的形式吧。这里我们只以定点数讲解,即原码、反码、补码的知识。浮点数的机器码比较复杂,一般不会考到浮点数的位操作。这里我只强调几点:整数0的机器码是32位全为0;32位全为1的整数是-1;首位为0,其余31位为1的数就是 int 所能表示的最大正整数;符号位为1,其余位全为0的不是 -0 ,而是int所能表示的最小负整数;整数的机器码是以其补原创 2016-04-21 14:20:09 · 734 阅读 · 0 评论