JAVA
文章平均质量分 81
iteye_19607
这个作者很懒,什么都没留下…
展开
-
java.lang-API整理(3)
十.InheritableThreadLocal类(继承性ThreadLocal)InheritableThreadLocal类继承自ThreadLocal,它具有ThreadLocal的所有特征,同时它还具有能够访问其父线程绑定的数据.但是其父线程不能访问其绑定的数据.感觉就像父线程set的值被"继承下来"一样,但是子线程只能get父线程绑定的值,不能通过set去重置父线程的值,因为...原创 2013-03-31 09:24:44 · 89 阅读 · 0 评论 -
NIO-Channel相关接口详解
一.Channel相关接口(概述):NIO中核心的API,它被底层操作封装,提供了数据进行NIO操作的"途径",可以配合Selector实现多路IO复用/非阻塞操作.Channel(通道)表示实体(例如硬件设备,文件,网络socket等)的开放链接.Channel与其实体关联,并具有相同的状态,例如关闭或者开启.Channels可以是异步的(noblocking),可中断的(iner...原创 2013-04-03 11:18:45 · 354 阅读 · 0 评论 -
NIO-SelectableChannel详解
SelectableChannel("可被选择"通道):抽象类,此类实现了InterruptableChannel接口."可选择"通道,就是noblocking通道,它的实现需要Selector的支持.因此这些Channel取名为"SelectableChannel"是可以理解的.为 了和Selector(选择器)一起使用,此类的实例必须首先通过register方法进行注册.此方法返回一个...原创 2013-04-03 11:20:41 · 740 阅读 · 0 评论 -
NIO-SocketChannel详解
SocketChannel为JAVA-NIO中核心类,它实现了SelectableChannel/ScatteringByteChannel/GatheringByteChannel.不过它仍然为一个抽象类.实现层将会有JVM在运行时选择.(参见下文) SocketChannel只不过是Socket通讯 + Selector机制的抽象层API,底层的通讯仍需要socket支持.可以...原创 2013-04-03 11:37:50 · 818 阅读 · 0 评论 -
NIO-Selector类详解
Selector本身为抽象类,AbstractSelector是Selector类的抽象实现类,具体的实现类更加底层(SelectorImpl,位于sun.nio.ch);Selector即为"选择器",支撑了NIO的多路复用.Selector不能直接创建,需要通过Selector.open()获得,该方法将使用系统默认的选择器提供者创建新的选择器(SelectorProvider),可以通过...原创 2013-04-03 13:55:18 · 678 阅读 · 0 评论 -
Socket编程:MulticastSocket-API简介
MulticastSocket为多播数据套接字,用于发送和接收IP多播包,此类继承自DatagramSocket即"多播"为UDP,但是它具有加入"多播组"的能力.一.协议介绍:有两种类型的"一对多"服务:广播(broadcast)和多播(multicast).对与广播,本地网络(仅限于本地网络)都会受到一个数据副本.对于多播,消息只会发送给一个多播地址,网络只会把数据包发给那些需要接...原创 2013-04-03 13:58:50 · 2471 阅读 · 0 评论 -
【转发摘要】微服务架构设计
前言:本文摘自infoQ《架构师》期刊201606期中《谈谈后端业务系统的微服务化改造》一文,作者:张旭;与本文相关的文献包括:1)《微服务(翻译版)》2)《微服务(原文)》;非常感谢多位作者为我们提供如此优秀的文档! 1. 篇首语 业务系统是任何一个用户产品的必须组成,充当着一个门面的角色,用户的输入就是这个系统需要维护的,数据存取是整个系统的核心。例如,广告业务系...原创 2016-08-22 13:44:02 · 392 阅读 · 0 评论 -
NIO-Pile通道实例
package com.test.socket;import java.nio.ByteBuffer;import java.nio.CharBuffer;import java.nio.channels.Pipe;import java.nio.channels.Pipe.SinkChannel;import java.nio.channels.Pipe.Source...原创 2013-04-04 10:34:03 · 110 阅读 · 0 评论 -
JAVA-Socket/ServerSocket API简述
一.Socket(套接字):Socket是实现P2P数据通讯的基础.Socket()Socket(String host,int port)Socket(InetAddress,int port)public void connect(SocketAddress address):将套接字连接到远程.如果已经bind或者connect,将抛出异常.链接将阻塞,直到成功或者失败...原创 2013-04-04 10:34:14 · 276 阅读 · 0 评论 -
SocketChannel实例
package com.test.socket;import java.net.InetSocketAddress;import java.net.ServerSocket;import java.net.SocketAddress;import java.nio.ByteBuffer;import java.nio.CharBuffer;import java.n...原创 2013-04-04 10:34:24 · 293 阅读 · 0 评论 -
Socket问题小结
1. Socket(TCP/IP)通讯,需要两端的Socket都持有连接,当Client端去远端connect时(成功之前),首先会bind到本地的一个可用的端口(可以通过socket.bind(InetAddress)来手动指定),可以通过socket.boud()检测是否已经bind成功.尽管Socket Client端建立连接时bind的端口通常我们不关心,但是这是TCP建立连...原创 2013-04-02 10:33:27 · 255 阅读 · 0 评论 -
NIO-BUFFER详解
一.Buffer类(抽象): 一个用于特定基本数据的容器.buffer即为特定基本类型元素的线性存储容器,底层通过数组结构支撑.buffer具有数据的很多特征,如容量,限制(limit),位置(postion),以及方便操作的"标记"(mark). 容量:capacity,即buffer所能承载的最大数据元素个数.一个buffer一旦创建,capacity将无法被修改...原创 2013-04-02 10:21:48 · 245 阅读 · 0 评论 -
IO与SOCKET IO散记
对于File IO,磁盘驱动器将数据从磁盘中"汲取"到Kernel space(系统内存),此过程将采用DMA(直接内存存取)方式;不消耗CPU周期.对于用户进程,如果想操作数据,需要将kernel space中的数据buffer复制到user space(即进程空间).因为进程不具有特权,无法直接操作kernel space以及磁盘,进程操作需要通过OS内核做调度.虚拟内存:目前所...原创 2013-04-02 10:06:54 · 162 阅读 · 0 评论 -
java.lang-API整理(2)
七.ClassLoader(abstract):类加载器类加载器是负责加载类的对象。ClassLoader 类是一个抽象类。如果给定类的二进制名称,那么类加载器会试图查找或生成构成类定义的数据。一般策略是将名称转换为某个文件名,然后从文件系统读取该名称的“类文件”。每个 Class 对象都包含一个对定义它的 ClassLoader 的引用。 数组类的 Class 对象不是...原创 2013-03-31 09:24:53 · 79 阅读 · 0 评论 -
java.lang-API整理(1)
一.Cloneable接口(浅复制)此类实现了 Cloneable 接口,以指示 Object.clone() 方法可以合法地对该类实例进行按字段复制。此接口只是一个标记,无实际方法。如果在没有实现 Cloneable 接口的实例上调用 Object 的 clone 方法,则会导致抛出 CloneNotSupportedException 异常。按照惯例,实现此接口的类应该使...原创 2013-03-31 09:25:02 · 81 阅读 · 0 评论 -
Deque
Deque是双端队列,可以使用FIFO(队列)和FILO(栈),其实现常见的有ArrayDeque,LinkedList、LinkedBlockingDeque(线程安全)一. ArrayDeque是基于数组实现的,且数组容量是可扩展的(即无容量边界)的双端队列。它不是线程安全的。该类性能可能快于stack,在作为队列时快于LinkedList。ArrayDeque作为stack的取代类...原创 2013-04-01 21:18:07 · 131 阅读 · 0 评论 -
SynchronousQueue(同步队列)
SynchronousQueue:同步Queue,属于线程安全的BlockingQueue的一种,此队列设计的理念类似于"单工模式",对于每个put/offer操作,必须等待一个take/poll操作,类似于我们的现实生活中的"火把传递":一个火把传递地他人,需要2个人"触手可及"才行. 因为这种策略,最终导致队列中并没有一个真正的元素;这是一种pipleline思路的基于queue的"操作传递...原创 2013-04-01 21:34:21 · 1031 阅读 · 0 评论 -
NIO部分:DatagramChannel实例
package com.test.socket;import java.net.DatagramSocket;import java.net.InetSocketAddress;import java.nio.ByteBuffer;import java.nio.CharBuffer;import java.nio.channels.DatagramChannel;...原创 2013-04-01 21:36:26 · 161 阅读 · 0 评论 -
NIO部分:DatagramSocket实例
////////////////////////////Demopackage com.test.java;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;import java.net.InetSocketAddress;publ...原创 2013-04-01 21:38:06 · 508 阅读 · 0 评论 -
JAVA-SOCKET编程
一.InetAddress类表示为互联网协议地址.InetAddress类具有一个缓存,用于存储成功或者不成功的主机名解析.可以通过系统属性"networkaddress.cache.ttl"(time-to-live)来设定.InetAddress有2个子类:Inet4Address和Inet6Address,大部分时候我们无需关注获得InetAddress是何种类型.可以使用ins...原创 2013-04-01 21:57:12 · 211 阅读 · 0 评论 -
Socket通讯与多线程处理-完整实例
开发一段程序来模拟Socket 通讯和数据传输,socket通讯需要注意的几个问题:Socket API的合理使用,以及关于socket option参数的设计和优化socket交互中,有关阻塞/异常处理问题socket通讯对于server端而言,多线程或者线程池的合理使用数据流成帧技术的使用本段程序,如果在production环境使用,还有很多需要优化和适配的地方,如下...原创 2013-04-02 09:28:18 · 742 阅读 · 0 评论 -
JAVA-NIO程序设计完整实例
NIO-Socket通讯,为我们解决了server端多线程设计方面的性能/吞吐量等多方面的问题,它提供了以非阻塞模式 + 线程池的方式来解决Server端高并发问题..NIO并不能显著的提升Client-server的通讯性能(其中包括全局性耗时总和,Server物理机资源开销和实际计算量),但是它可以确保Server端在支撑相应的并发量情况下,对物理资源的使用处于可控状态.对于开发者而言,N...原创 2013-04-02 10:06:11 · 196 阅读 · 0 评论 -
Java并发锁控制API详解
一.Lock接口(java.util.concurrent.locks):void lock():获取锁,阻塞方式;如果资源已被其他线程锁定,那么lock将会阻塞直到获取锁,锁阻塞期间不受线程的Interrupt的影响,在获取锁成功后,才会检测线程的interrupt状态,如果interrupt=true,则抛出异常。unlock():释放锁tryLock():尝试获取锁,并发环...原创 2013-04-04 10:34:47 · 294 阅读 · 0 评论 -
NIO-ServerSocketChannel详解
ServerSocketChannel类似于SocketChannel[参考:http://shift-alt-ctrl.iteye.com/blog/1840409],只不过ServerSocketChannel使用server端.ServerSocketChannel是ServerSocket + Selector的高层封装.可以通过socket()方法获得与其关联的ServerSocke...原创 2013-04-05 08:34:24 · 515 阅读 · 0 评论 -
JVM类加载机制小结
一.类加载 虚拟机把class文件加载至内存之后,对字节码数据进行校验/解析/初始化等操作,最终形成可被VM直接使用的java类型,这就是虚拟机类加载机制.类的加载完全可以在运行时进行,这给VM提供了动态加载类提供了可行性. 类生命周期过程大概分为:加载-->校验-->解析-->初始化-->使用-->卸载;类在被"使用"之前必须进行前4个...原创 2013-04-10 15:38:47 · 251 阅读 · 0 评论 -
JAVA内存模型和线程安全
一.JAVA内存模型(JMM,JAVA Memory Model): 运行时涉及到两种内存,主内存和工作区内存,其中工作区内存通常为CPU的高速缓存区用来加快内存数据读取操作的(各线程独立).所有的变量内容都存在主内存中,当需要对内存数据进行操作时,数据将会从主存中load到工作区缓存并由CPU计算和赋值操作,然后再由工作区内存write到主存中,读取时如果工作区内存中已经有(loa...原创 2013-04-10 18:15:53 · 109 阅读 · 0 评论 -
logback日志与MDC机制
logback是个比较好用的java日志输出工具包,可配置型高,而且性能优秀。 一、Layout描述1、%logger{length}、%c{length}、%lo{length}:在日志事件的源点输出logger的名称,比如 1)LoggerFactory.getLogger(TestMain.class),此时%logger的值为“com.xxx.TestMa...原创 2016-12-16 14:48:42 · 18084 阅读 · 1 评论 -
JAVA执行Shell命令
基于JAVA执行shell指令,通常的代码范例为:Process process = Runtime.getRuntime().exec("jps -v");BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));while (true) { ...原创 2017-01-11 23:34:10 · 1072 阅读 · 0 评论 -
JAVA正则表达式过滤文件
正则表达式过滤文件列表,听起来简单,如果用java实现,还真需要一番周折,本文简析2种方式 1、适用于路径确定,文件名时正则表达式的情况(jdk6的写法)String filePattern = "/data/logs/.+\\.log";File f = new File(filePattern);File parentDir = f.getParentFile()...原创 2017-02-14 11:12:54 · 2842 阅读 · 0 评论 -
Redis客户端简单封装(spring)
Jedis客户端已经比较易用了,不过在spring环境下,可能还需要简单的封装一下。一、单节点Redis服务使用 即只有一个Redis server,或者在M-S模式下,只有Master提供读写服务时使用,配置中指定Master的IP和Port即可。此处使用了Spring FactoryBean方式来创建JedisPool实例。 1、SingletonClient...原创 2017-04-28 12:27:33 · 604 阅读 · 0 评论 -
ServiceLoader加载基于配置的类服务
Java中有一个ServiceLoader类,可以用来加载指定的类服务。Java中目前还没有简单的办法来获取指定接口子类的列表。ServiceLoader能够在一定程度上,根据配置,加载并实例化指定接口的子类。 1、声明Service:在META-INF/services目录下创建配置文件,文件名称为Super类或者接口全名称,文件的内容每一行为一个子类全名,这个文件必须放在ME...原创 2014-08-22 17:41:43 · 646 阅读 · 0 评论 -
JAVA中try-catch异常逃逸
有时候一些小的细节,确实比较纠结,对于try-catch-finally代码块中代码依次执行,当try中有exception抛出时,将会有catch拦截并执行,如果没有catch区块,那么exception将被添加到“return栈顶”并执行finally。 1) 如果catch中,再次抛出exception,那么原try中的exception是否还能抛出呢? 2) ...原创 2014-11-17 12:51:58 · 322 阅读 · 0 评论 -
guava cache与编程实践
Guava-cache guava cache是google开源代码库中的一个辅助功能模块,可以作为JVM嵌入式cache来使用,基于key-value模型。对于Rdedis、Memcached,这种缓存系统,我们称之为“分布式缓存”,它们通过集群扩容,可以将海量数据cache在远端。而guava cache,作为“嵌入式cache”,这些cache的数据寄宿在当前JVM堆中,和JVM...原创 2015-03-18 16:12:35 · 257 阅读 · 0 评论 -
JVM内存分配与调优参数列表
一.运行时数据区: 程序计数器:它是一块较小的内存空间,主要作用是当前线程所执行的字节码的行号指示器.由于java虚拟机的多线程是通过轮流切换并分配处理器执行时间的方式来实现的(协作式/抢占式?!),即任何时刻,任一CPU只会正在处理一个线程的指令;为了确保线程切换后能够正确恢复执行的位置,每个线程都有一个独立的程序计数器,每个计数器为线程私有.如果线程正在执行java方法,那么...原创 2013-04-09 09:01:11 · 126 阅读 · 0 评论 -
JVM垃圾回收
一.对象查找 在对对象回收之前,需要首先查找出亟待回收的对象,在JVM中,采取"根检索"算法来查找"死亡"的对象;这个算法的基本思想是通过一系列名为"GC Roots"的对象作为起始点,从这些节点开始向下搜索,搜索所经过的路径为对象引用链;如果一个对象到GC Roots上没有任何引用链可达,那么此对象就是"不可达".可以作为GC Roots的对象大概可以分为如下2种: 1)...原创 2013-04-09 09:00:59 · 69 阅读 · 0 评论 -
JAVA序列化/反序列化与单例
单例设计类: package com.test.singleton;import java.io.IOException;import java.io.ObjectStreamException;import java.io.Serializable;public class SingleTon implements Serializable{ /*...原创 2013-04-07 09:17:49 · 120 阅读 · 0 评论 -
NIO中Channel.spi学习
一.channel.spi底层实现我们首先看看SelectorProvider:SelectorProvider提供了通过底层输出各种NIO实现的接口:public abstract DatagramChannel openDatagramChannel():创建并打开一个DatagramChannel...DatagramChannel.open()方法调用.public abst...原创 2013-04-05 08:34:54 · 272 阅读 · 0 评论 -
NIO-FileChannel详解
一.FileLock(通道文件锁,记录区域锁):表示文件区域锁定标记.FileLock并没有实现lock接口,它仅仅是一个辅助锁操作类.每次通过FileChannel.lock()或者tryLock()获取文件锁.一旦获取锁,那么lock将持续有效,直到被release(),以及JVM退出.可以通过对fileLock.isValid()检测锁的有效性.文件锁要么是独占的,有么是共享的.共享锁可...原创 2013-04-05 08:35:20 · 423 阅读 · 0 评论 -
NIO-Pile通道详解
Pipe实现单向管道传送的通道对等端.管道是由两端组成:一个可写入的sink通道和一个可读取的source通道(根据数据来源).一旦将某些字节写入接受器通道,就可以按照与写入时完全相同的顺序从源通道中读取这些字节.在另一个线程从管道中读取这些字节或先前已写入的字节之前,是否阻塞将该字节写入管道的线程是与系统相关的,因此是未指定的.Pipe名为管道,其实底层实现为一个本地的TCP链接:即一个侦听...原创 2013-04-05 08:35:44 · 145 阅读 · 0 评论 -
NIO-DatagramChannel详解
DatagramChannel是NIO中面向Datagram(数据报)的套接字通道.底层为DatagramSocket + selector的高层封装.此接口仍然实现了SeletableChannel,ScatteringByteChannel, GatheringByteChannel . 可以通过DatagramChannel.open()方法打开获得通道,但此时尚未链接.Data...原创 2013-04-05 08:36:11 · 1315 阅读 · 0 评论