Java
文章平均质量分 93
周先森x
这个作者很懒,什么都没留下…
展开
-
ArrayList与LinkedList模拟实现
public interface Collection {void add(Object o);int size();Iterator iterator();}原创 2014-07-19 11:27:59 · 265 阅读 · 0 评论 -
【Java NIO】Selector
Selector(选择器)是Java NIO中能够检测一到多个NIO通道,并能够知晓通道是否为诸如读写事件做好准备的组件。这样,一个单独的线程可以管理多个channel,从而管理多个网络连接。为什么使用Selector?仅用单个线程来处理多个Channels的好处是,只需要更少的线程来处理通道。事实上,可以只用一个线程处理所有的通道。对于操作系统来说,线程之间上下文切换的开转载 2014-09-16 17:09:59 · 311 阅读 · 0 评论 -
【Java NIO】Channel
Java NIO的通道类似流,但又有些不同:既可以从通道中读取数据,又可以写数据到通道。但流的读写通常是单向的。通道可以异步地读写。通道中的数据总是要先读到一个Buffer,或者总是要从一个Buffer中写入。正如上面所说,从通道读取数据到缓冲区,从缓冲区写入数据到通道。如下图所示:Channel的实现这些是Java NIO中最重要的通道的实现:转载 2014-09-16 17:04:34 · 273 阅读 · 0 评论 -
【Java NIO】Java NIO与IO
当学习了Java NIO和IO的API后,一个问题马上涌入脑海:我应该何时使用IO,何时使用NIO呢?在本文中,我会尽量清晰地解析Java NIO和IO的差异、它们的使用场景,以及它们如何影响您的代码设计。Java NIO和IO的主要区别下表总结了Java NIO和IO之间的主要差别,我会更详细地描述表中每部分的差异。IO NIO转载 2014-09-16 16:57:32 · 343 阅读 · 0 评论 -
【设计模式】动态代理 && 模拟JDK动态代理
明白动态代理需要明白回答以下问题:什么叫动态代理?怎么产生?动态代理的作用?可配置的事务,权限控制,日志等等。。。。下面来回答以上3个问题:原创 2014-09-15 22:11:42 · 683 阅读 · 0 评论 -
临界区管理的软件方法--Dekker算法
初步设想是这样的:定义全局布尔变量 turn ,其值 0, 1 分别表示 P0 和 P1 进程占有了临界区。对于 P0 进程:?12345678910bool turn;/* 对于 P0 进程 */while (turn != 0); /*什么都不做,忙等待*/ /****原创 2014-08-25 17:56:31 · 765 阅读 · 0 评论 -
读者与写者的问题
读者—写者问题读者—写者问题(Readers-Writers problem)也是一个经典的并发程序设计问题,是经常出现的一种同步问题。计算机系统中的数据(文件、记录)常被多个进程共享,但其中某些进程可能只要求读数据(称为读者Reader);另一些进程则要求修改数据(称为写者Writer)。就共享数据而言,Reader和Writer是两组并发进程共享一组数据区,要求:(1)允许原创 2014-08-26 13:56:03 · 471 阅读 · 0 评论 -
【Java并发系列】Java中的锁
锁像synchronized同步块一样,是一种线程同步机制,但比Java中的synchronized同步块更复杂。因为锁(以及其它更高级的线程同步机制)是由synchronized同步块的方式实现的,所以我们还不能完全摆脱synchronized关键字(译者注:这说的是Java 5之前的情况)。自Java 5开始,java.util.concurrent.locks包中包含了一些锁的实现,转载 2014-09-17 12:24:44 · 316 阅读 · 0 评论 -
【Java 之 JVM】对象的创建过程
虚拟机遇到一条new 指令时:1.检查这个指令的参数是否能在常量吃中定位到类的符号引用,并检查这个符号引用代表类是否已被加载、解析和初始化过。如果没有,必须原创 2014-09-17 17:15:42 · 893 阅读 · 0 评论 -
【Java 之 JVM】Java内存结构小结
JVM体系主要包含以下部分:原创 2014-09-17 16:54:03 · 615 阅读 · 0 评论 -
【Java并发系列】信号量
Semaphore(信号量) 是一个线程同步结构,用于在线程间传递信号,以避免出现信号丢失(译者注:下文会具体介绍),或者像锁一样用于保护一个关键区域。自从5.0开始,jdk在java.util.concurrent包里提供了Semaphore 的官方实现,因此大家不需要自己去实现Semaphore。但是还是很有必要去熟悉如何使用Semaphore及其背后的原理本文的涉及的主题如下:转载 2014-09-17 12:28:37 · 316 阅读 · 0 评论 -
【Java】 stringbuilder 的append方法 和String的+的效率对比
经常看到一些论坛在谈java代码优化的时候讲到要将字符串连接操作”+”换成StringBuilder(或StringBuffer,后面为简单起见,只说StringBuilder)的append操作以提升性能,那么字符串连接使用StringBuilder#append来替代”+”真的会带来性能提升吗?不忙回答,先看几个例子,代码如下:public class StringConcat {转载 2014-10-19 20:11:45 · 608 阅读 · 0 评论 -
MyEclipse快捷键
-------------------------------------MyEclipse 快捷键1(CTRL)-------------------------------------Ctrl+1 快速修复Ctrl+D: 删除当前行 Ctrl+Q 定位到最后编辑的地方 Ctrl+L 定位在某行 Ctrl+O 快速显示 OutLine Ctrl+T 快速原创 2014-11-30 17:36:17 · 214 阅读 · 0 评论 -
【Java基础】字符数组与list之间的相互转化
//字符数组转List String[] s = {"a","b","c"}; List list= java.util.Arrays.asList(s); //List转字符数组——例子一 List list = new ArrayList(); list.add("a1"); list.add("a2"); String[] toBeStored = list.原创 2014-12-31 16:34:52 · 233 阅读 · 0 评论 -
【Java NIO】Buffer
Java NIO中的Buffer用于和NIO通道进行交互。如你所知,数据是从通道读入缓冲区,从缓冲区写入到通道中的。缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存。这块内存被包装成NIO Buffer对象,并提供了一组方法,用来方便的访问该块内存。Buffer的基本用法使用Buffer读写数据一般遵循以下四个步骤:写入数据到Buffer调用fli转载 2014-09-16 17:08:01 · 386 阅读 · 0 评论 -
【Java NIO】概述
Java NIO 由以下几个核心部分组成:ChannelsBuffersSelectors虽然Java NIO 中除此之外还有很多类和组件,但在我看来,Channel,Buffer 和 Selector 构成了核心的API。其它组件,如Pipe和FileLock,只不过是与三个核心组件共同使用的工具类。因此,在概述中我将集中在这三个组件上。其它组件会在单独的章节中讲到。转载 2014-09-16 17:04:34 · 241 阅读 · 0 评论 -
Java容器实现——ArrayList和LinkedList
public class MyArrayList implements Iterable { private static final int DEFAULT_CAPACITY = 10; private int theSize; @SuppressWarnings("unchecked") private AnyType[] theItems = (AnyType[])new Obj原创 2014-08-03 14:35:56 · 264 阅读 · 0 评论 -
【Java 之 JVM】垃圾收集算法
一、判断对象是否存活——可达性分析算法基本思想:原创 2014-09-17 19:57:47 · 567 阅读 · 0 评论 -
【Java 之 JVM】内存分配与回收策略
Javati提倡的自动内存管理最终无非归结为解决2个问题:对对象分配内存以及分配给对象的内存原创 2014-09-17 22:07:35 · 483 阅读 · 0 评论 -
HashMap模拟实现
package collection;import java.util.AbstractMap;import java.util.HashSet;import java.util.LinkedList;import java.util.ListIterator;import java.util.Map;import java.util.Set;public class Sim原创 2014-08-20 19:41:48 · 458 阅读 · 0 评论 -
【设计模式】单例模式 && 谈谈双锁机制的弊端
我们知道单例模式改善全局变量和命名空间的冲突,可以说是一种改良了的全局变量。这种一个类只有一个实例,且提供一个访问全局点的方式,更加灵活的保证了实例的创建和访问约束。系统中只有一个实例,因此构造方法应该为私有。原创 2014-07-16 12:06:55 · 787 阅读 · 0 评论 -
【Java容器】Java容器框架解析
1)Collection。保存单一的元素。List按照插入的顺序保存元素,而Set不能有重复元素。Queue按照排队规则来确定对象产生的顺序。2)Map。保存一组成对的“键值对”对象。原创 2014-09-04 15:39:25 · 530 阅读 · 0 评论 -
【Java集合源码剖析】ArrayList源码剖析
ArrayList简介 ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长,类似于C语言中的动态申请内存,动态增长内存。 ArrayList不是线程安全的,只能用在单线程环境下,多线程环境下可以考虑用Collections.synchronizedList(List l)函数返回一个线程安全的ArrayList类,也可以使用concurrent并发包下转载 2014-09-09 16:37:23 · 213 阅读 · 0 评论 -
【Java并发系列】线程通信
原文链接 作者:Jakob Jenkov译者:杜建雄 校对:方腾飞线程通信的目标是使线程间能够互相发送信号。另一方面,线程通信使线程能够等待其他线程的信号。例如,线程B可以等待线程A的一个信号,这个信号会通知线程B数据已经准备好了。本文将讲解以下几个JAVA线程间通信的主题:1、通过共享对象通信2、忙等待3、wait(),notify()和not原创 2014-09-14 10:08:18 · 298 阅读 · 0 评论 -
【Java并发系列】同步方法与同步块
原文链接 作者:Jakob Jenkov 译者:李同杰Java 同步块(synchronized block)用来标记方法或者代码块是同步的。Java同步块用来避免竞争。本文介绍以下内容:Java同步关键字(synchronzied)实例方法同步静态方法同步实例方法中同步块静态方法中同步块Java同步示例Java 同步关键字(synchronized)原创 2014-09-14 09:41:01 · 325 阅读 · 0 评论 -
【Java并发系列】死锁
原文链接 作者:Jakob Jenkov 译者:申章 校对:丁一死锁是两个或更多线程阻塞着等待其它处于死锁状态的线程所持有的锁。死锁通常发生在多个线程同时但以不同的顺序请求同一组锁的时候。例如,如果线程1锁住了A,然后尝试对B进行加锁,同时线程2已经锁住了B,接着尝试对A进行加锁,这时死锁就发生了。线程1永远得不到B,线程2也永远得不到A,并且它们永远也不会知道发生了这样的事情。为原创 2014-09-14 13:59:09 · 193 阅读 · 0 评论 -
【Java并发系列】避免死锁
原文链接 作者:Jakob Jenkov译者:申章 校对:丁一在有些情况下死锁是可以避免的。本文将展示三种用于避免死锁的技术:加锁顺序加锁时限死锁检测加锁顺序当多个线程需要相同的一些锁,但是按照不同的顺序加锁,死锁就很容易发生。如果能确保所有的线程都是按照相同的顺序获得锁,那么死锁就不会发生。看下面这个例子:Thread转载 2014-09-14 14:21:04 · 339 阅读 · 0 评论 -
【Java并发系列】饥饿和公平
如果一个线程因为CPU时间全部被其他线程抢走而得不到CPU运行时间,这种状态被称之为“饥饿”。而该线程被“饥饿致死”正是因为它得不到CPU运行时间的机会。解决饥饿的方案被称之为“公平性” – 即所有线程均能公平地获得运行机会。 下面是本文讨论的主题:1. Java中导致饥饿的原因:高优先级线程吞噬所有的低优先级线程的CPU时间。线程被永久堵塞在一个等待进入同步块的状态。线程原创 2014-09-16 08:32:47 · 676 阅读 · 0 评论 -
将博客搬至CSDN
今日起,讲本人csdn博客搬迁至cnblog,我的cnblog地址为:http://www.cnblogs.com/tcals原创 2019-05-10 13:55:01 · 143 阅读 · 0 评论