自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(20)
  • 收藏
  • 关注

原创 NIO解读之ServerSocketChannel

ServerSocketChannel的类结构图:上文说了多路复用器Selector,这篇文章来解读ServerSocketChannel类,首先看创建ServerSocketChannel类的open方法,public static ServerSocketChannel open() throws IOException {        return SelectorPr

2015-03-21 14:40:59 1221

转载 域名解析中A记录、CNAME、MX记录、NS记录的区别和联系

转载自:http://blog.csdn.net/crazw/article/details/89865811. A记录 又称IP指向,用户可以在此设置子域名并指向到自己的目标主机地址上,从而实现通过域名找到服务器。说明:·指向的目标主机地址类型只能使用IP地址; 附加说明:            1) 泛域名解析即将该域名所有未指定的子域名都指向一个空间。在“主机名”中填入*

2015-03-20 16:41:46 479

转载 DNS解析过程详解

转载自:http://blog.csdn.net/crazw/article/details/8986504先说一下DNS的几个基本概念:   一. 根域就是所谓的“.”,其实我们的网址www.baidu.com在配置当中应该是www.baidu.com.(最后有一点),一般我们在浏览器里输入时会省略后面的点,而这也已经成为了习惯。根域服务器我们知道有13台,但是这是错

2015-03-20 16:41:38 452

原创 JDK的BIO类解读

说到IO就要对应到输入和输出,字节流和字符流,字符流也是通过字节流来实现的,我们来慢慢分析。先说说字节流的输入类,输入我们就要拿到输入流来读取数据,对应到java中,java.io.InputStream这个类是一个抽象类,定义了字节输入的基本的方法,这个类中有三个read方法,如下所示public int read(byteb[]) throws IOException

2015-03-20 16:38:43 432

原创 FileDescriptor解读

FileInputStream、FileOutputStream、SocketInputStream、SocketOutputStream中都有一个FileDescriptor对象,我们可以将这个文件描述符对象类比为我们要操作的文件在JVM中的一个句柄,但是这个句柄并没有实际对文件进行操作的动作,要想读取或者写入文件只能创建对象的输入流和输出流对象,FileDescriptor在输入输出流对象当中

2015-03-20 16:38:42 2531

原创 Linux文件描述符浅谈

对于Linux而言,所有对设备或文件的操作都是通过文件描述符进行的。当打开或者创建一个文件的时候,内核向进程返回一个文件描述符(非负整数)。后续对文件的操作只需通过该文件描述符,内核记录有关这个打开文件的信息。一个进程启动时,默认打开了3个文件,标准输入、标准输出、标准错误,对应文件描述符是0(STDIN_FILENO)、1(STDOUT_FILENO)、2(STDERR_FILENO),这些常量

2015-03-20 16:37:29 253

转载 wait() 不一定需要notify()唤醒

线程正常结束后,会使以这个线程对象运行的wait()等待,退出等待状态!而如果在运行wait()之前,线程已经结束了,则这个wait就没有程序唤醒了。      原码里的join()方法,实际上就是运行的 wait(). 需要运行join的线程运行join方法,实际上是在此线程上调用了需要加入的线程对象的wait()方法,加入的线程运行完后,自然从wait退出了。     到此,就

2015-03-20 16:36:11 2596

转载 浅析 Java Thread.join()

一、在研究join的用法之前,先明确两件事情。1.join方法定义在Thread类中,则调用者必须是一个线程,例如:Thread t = new CustomThread();//这里一般是自定义的线程类t.start();//线程起动t.join();//此处会抛出InterruptedException异常 2.上面的两行代码也是在一个线程里面执行的。 以上

2015-03-20 16:34:23 227

原创 ThreadLocal解读

每个Thread对象中都有一个ThreadLocal.ThreadLocalMap类型的属性,ThreadLocalMap中包装了内部类Entry(ThreadLocalk, Object v)的数组(Entry继承自WeakReference),key为ThreadLocal的引用,value是一个Object类型,通过ThreadLocal的set方法设置的就是每个线程自己的ThreadL

2015-03-20 16:33:44 725

原创 CountDownLatch解读

CountDownLatch类的内部有一个同步器的对象,他也是基于AQS来实现了,同步器代码如下:private static final class Sync extends AbstractQueuedSynchronizer {        private static final long serialVersionUID = 4982264981922014374L;

2015-03-20 16:33:07 394

原创 CyclicBarrier解读

CyclicBarrier能实现与CountDownLatch相同的功能,但是两者的实现上是不一样的,而且CountDownLatch每次使用完再继续使用就会有问题,而CyclicBarrier不一样,可以一直使用,下面我们来分析一下CyclicBarrier的代码。CyclicBarrier的代码中并没有定义自己的同步器类,他是基于ReentrantLock和Condition来实现的  

2015-03-20 16:32:12 622

原创 ScheduledThreadPool解读

了解了JDK自带的Timer和TimerTask的源码,再了解ScheduledThreadPool就会相对容易一些。ScheduledThreadPoolExecutor继承了ThreadPoolExecutor。我们测试的方法如下:ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPoo

2015-03-20 16:32:06 840

原创 ThreadPoolExecutor解读

我们常用的线程池实现如:ExecutorService fixdThreadPool = Executors.newFixedThreadPool(10); ExecutorService cachedThreadPool = Executors.newCachedThreadPool();是使用Executors类的方法创建的,他的内部创建了ThreadPoolExecutor对象,

2015-03-20 16:31:57 380

原创 CompletionService解读

CompletionService的测试代码如下所示:final Randomrandom = new Random();ExecutorService executorService = Executors.newFixedThreadPool(10);CompletionServicecompletionService =new ExecutorCompletionServ

2015-03-20 16:31:51 1239

原创 ReentrantLock、AbstractQueuedSynchronizer解读

在使用ReentrantLock时,我们首先调用的是ReentrantLock类的lock()方法,ReentrantLock内部维护着一个Sync同步对象,该对象继承了AbstractQueuedSynchronizer(以下简称AQS)抽象类。在创建ReentrantLock类时创建了这个Sync同步对象,ReentrantLock的构造方法如下:    public ReentrantL

2015-03-20 16:31:12 301

原创 Timer和TimerTask解读

测试Timer的代码如下:  Timer timer = new Timer();  timer.schedule(new TimerTask(){   @Override   public void run() {    System.out.println("aaaaa");   }  }, 0);Timer类中有一个TaskQueue和一个TimerThrea

2015-03-20 16:31:00 291

原创 JDK动态代理

Proxy.newProxyInstance(obj.getClass().getClassLoader(),obj.getClass().getInterfaces(),handler);JDK的动态代理是基于实现具体实现类实现的接口来生成动态的类字节码的,生成的代理类和具体的实现类没有任何关系,代理类中保存了实现InvocationHandler接口的引用,调用某个具体的方法的

2015-03-20 16:30:20 303

原创 NIO解读之多路复用器Selector

Selector类的结构图如下所示:Selector是JDK的NIO中最重要的类之一,当我们通过Selector.open()方法打开一个多路复用器的时候实际上执行的open方法为public static Selector open() throws IOException {    return SelectorProvider.provider().openSel

2015-03-20 16:26:01 6022

原创 基础数据类型及其包装类

Java中得数据分为8种基础数据以及引用,每种基本数据类型都对应了一个基础数据类型的包装类,对于基础数据类型,在线程的栈空间中是直接存放的基础数据的值,对于引用类型栈中存放的时指向堆空间的引用,基础数据类型对应到自己的包装类都有一个自动装箱和拆箱的过程,例如一个简单的Integer i =10就默认出发了一个装箱的动作,调用了Integer.valueof()方法同理int j=i

2015-03-20 16:22:24 293

原创 java基础之String类解读

String  a=“aa”;String不是一个基本的数据类型,而是引用类型,对于以上简单的一句话再java编译器看来再编译阶段是可以确定下来的,那么就把“aa”对象存放在当前class文件的常量池区域(注意不是堆,具体来说是Perm区),常量池同样也是可以再运行时扩充的,例如“XXX”.intern()的调用,就是运行时向class的常量池中注入数据,不断注入可以导致java.lang.O

2015-03-20 15:55:31 359

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除