- 博客(20)
- 收藏
- 关注
原创 NIO解读之ServerSocketChannel
ServerSocketChannel的类结构图:上文说了多路复用器Selector,这篇文章来解读ServerSocketChannel类,首先看创建ServerSocketChannel类的open方法,public static ServerSocketChannel open() throws IOException { return SelectorPr
2015-03-21 14:40:59
1269
转载 域名解析中A记录、CNAME、MX记录、NS记录的区别和联系
转载自:http://blog.youkuaiyun.com/crazw/article/details/89865811. A记录 又称IP指向,用户可以在此设置子域名并指向到自己的目标主机地址上,从而实现通过域名找到服务器。说明:·指向的目标主机地址类型只能使用IP地址; 附加说明: 1) 泛域名解析即将该域名所有未指定的子域名都指向一个空间。在“主机名”中填入*
2015-03-20 16:41:46
519
转载 DNS解析过程详解
转载自:http://blog.youkuaiyun.com/crazw/article/details/8986504先说一下DNS的几个基本概念: 一. 根域就是所谓的“.”,其实我们的网址www.baidu.com在配置当中应该是www.baidu.com.(最后有一点),一般我们在浏览器里输入时会省略后面的点,而这也已经成为了习惯。根域服务器我们知道有13台,但是这是错
2015-03-20 16:41:38
488
原创 JDK的BIO类解读
说到IO就要对应到输入和输出,字节流和字符流,字符流也是通过字节流来实现的,我们来慢慢分析。先说说字节流的输入类,输入我们就要拿到输入流来读取数据,对应到java中,java.io.InputStream这个类是一个抽象类,定义了字节输入的基本的方法,这个类中有三个read方法,如下所示public int read(byteb[]) throws IOException
2015-03-20 16:38:43
468
原创 FileDescriptor解读
FileInputStream、FileOutputStream、SocketInputStream、SocketOutputStream中都有一个FileDescriptor对象,我们可以将这个文件描述符对象类比为我们要操作的文件在JVM中的一个句柄,但是这个句柄并没有实际对文件进行操作的动作,要想读取或者写入文件只能创建对象的输入流和输出流对象,FileDescriptor在输入输出流对象当中
2015-03-20 16:38:42
2620
原创 Linux文件描述符浅谈
对于Linux而言,所有对设备或文件的操作都是通过文件描述符进行的。当打开或者创建一个文件的时候,内核向进程返回一个文件描述符(非负整数)。后续对文件的操作只需通过该文件描述符,内核记录有关这个打开文件的信息。一个进程启动时,默认打开了3个文件,标准输入、标准输出、标准错误,对应文件描述符是0(STDIN_FILENO)、1(STDOUT_FILENO)、2(STDERR_FILENO),这些常量
2015-03-20 16:37:29
279
转载 wait() 不一定需要notify()唤醒
线程正常结束后,会使以这个线程对象运行的wait()等待,退出等待状态!而如果在运行wait()之前,线程已经结束了,则这个wait就没有程序唤醒了。 原码里的join()方法,实际上就是运行的 wait(). 需要运行join的线程运行join方法,实际上是在此线程上调用了需要加入的线程对象的wait()方法,加入的线程运行完后,自然从wait退出了。 到此,就
2015-03-20 16:36:11
2691
转载 浅析 Java Thread.join()
一、在研究join的用法之前,先明确两件事情。1.join方法定义在Thread类中,则调用者必须是一个线程,例如:Thread t = new CustomThread();//这里一般是自定义的线程类t.start();//线程起动t.join();//此处会抛出InterruptedException异常 2.上面的两行代码也是在一个线程里面执行的。 以上
2015-03-20 16:34:23
257
原创 ThreadLocal解读
每个Thread对象中都有一个ThreadLocal.ThreadLocalMap类型的属性,ThreadLocalMap中包装了内部类Entry(ThreadLocalk, Object v)的数组(Entry继承自WeakReference),key为ThreadLocal的引用,value是一个Object类型,通过ThreadLocal的set方法设置的就是每个线程自己的ThreadL
2015-03-20 16:33:44
782
原创 CountDownLatch解读
CountDownLatch类的内部有一个同步器的对象,他也是基于AQS来实现了,同步器代码如下:private static final class Sync extends AbstractQueuedSynchronizer { private static final long serialVersionUID = 4982264981922014374L;
2015-03-20 16:33:07
428
原创 CyclicBarrier解读
CyclicBarrier能实现与CountDownLatch相同的功能,但是两者的实现上是不一样的,而且CountDownLatch每次使用完再继续使用就会有问题,而CyclicBarrier不一样,可以一直使用,下面我们来分析一下CyclicBarrier的代码。CyclicBarrier的代码中并没有定义自己的同步器类,他是基于ReentrantLock和Condition来实现的
2015-03-20 16:32:12
679
原创 ScheduledThreadPool解读
了解了JDK自带的Timer和TimerTask的源码,再了解ScheduledThreadPool就会相对容易一些。ScheduledThreadPoolExecutor继承了ThreadPoolExecutor。我们测试的方法如下:ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPoo
2015-03-20 16:32:06
886
原创 ThreadPoolExecutor解读
我们常用的线程池实现如:ExecutorService fixdThreadPool = Executors.newFixedThreadPool(10); ExecutorService cachedThreadPool = Executors.newCachedThreadPool();是使用Executors类的方法创建的,他的内部创建了ThreadPoolExecutor对象,
2015-03-20 16:31:57
411
原创 CompletionService解读
CompletionService的测试代码如下所示:final Randomrandom = new Random();ExecutorService executorService = Executors.newFixedThreadPool(10);CompletionServicecompletionService =new ExecutorCompletionServ
2015-03-20 16:31:51
1284
原创 ReentrantLock、AbstractQueuedSynchronizer解读
在使用ReentrantLock时,我们首先调用的是ReentrantLock类的lock()方法,ReentrantLock内部维护着一个Sync同步对象,该对象继承了AbstractQueuedSynchronizer(以下简称AQS)抽象类。在创建ReentrantLock类时创建了这个Sync同步对象,ReentrantLock的构造方法如下: public ReentrantL
2015-03-20 16:31:12
339
原创 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
324
原创 JDK动态代理
Proxy.newProxyInstance(obj.getClass().getClassLoader(),obj.getClass().getInterfaces(),handler);JDK的动态代理是基于实现具体实现类实现的接口来生成动态的类字节码的,生成的代理类和具体的实现类没有任何关系,代理类中保存了实现InvocationHandler接口的引用,调用某个具体的方法的
2015-03-20 16:30:20
329
原创 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
6087
原创 基础数据类型及其包装类
Java中得数据分为8种基础数据以及引用,每种基本数据类型都对应了一个基础数据类型的包装类,对于基础数据类型,在线程的栈空间中是直接存放的基础数据的值,对于引用类型栈中存放的时指向堆空间的引用,基础数据类型对应到自己的包装类都有一个自动装箱和拆箱的过程,例如一个简单的Integer i =10就默认出发了一个装箱的动作,调用了Integer.valueof()方法同理int j=i
2015-03-20 16:22:24
317
原创 java基础之String类解读
String a=“aa”;String不是一个基本的数据类型,而是引用类型,对于以上简单的一句话再java编译器看来再编译阶段是可以确定下来的,那么就把“aa”对象存放在当前class文件的常量池区域(注意不是堆,具体来说是Perm区),常量池同样也是可以再运行时扩充的,例如“XXX”.intern()的调用,就是运行时向class的常量池中注入数据,不断注入可以导致java.lang.O
2015-03-20 15:55:31
387
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人