
JAVA
文章平均质量分 61
在风雨中奔跑
这个作者很懒,什么都没留下…
展开
-
Java NIO笔记之Buffer
一个Buffer对象是固定数量的大小的数据容器,作用是一个存储器或者分段运输区。 缓冲区的工作与通道紧密联系。通道是I/O传输发生时通过的入口,而缓冲区是这些数据传输的来源或目标。对于离开缓冲区的传输,您想传递出去的数据被置于一个缓冲区,被传送到通道。对于传回缓冲区的传输,一个通道将数据放置在您所提供的缓冲区中。这种在协同对象(通常是您所写的对象以及一到多个Channel对象)之间进行的缓原创 2017-03-12 16:55:29 · 612 阅读 · 0 评论 -
Java并发之阻塞队列(三)
SynchronousQueue是阻塞队列的一种,每一次insert操作必须等在另外一个线程的remove操作,同步队列没有任何容器,甚至一个队列容器都没有.同步队列类似于 CSP 和 Ada 中使用的 rendezvous 信道。它非常适合于传递性设计,在这种设计中,在一个线程中运行的对象要将某些信息、事件或任务传递给在另一个线程中运行的对象,它就必须与该对象同步。对于正在等待的生产者和使用原创 2017-01-02 19:10:34 · 440 阅读 · 0 评论 -
Java并发之阻塞队列(二)
LinkedBlockingQueue一个由链表组合而成的有界阻塞队列. 1.LinkedBlockingQueue的数据结构 采用的是单链表结构 2.LinkedBlockingQueue源码分析 - 2.1继承关系public class LinkedBlockingQueue<E> extends AbstractQueue<E> implements Block原创 2017-01-01 12:45:52 · 391 阅读 · 0 评论 -
项目部署到Tomcat中classes目录中配置文件不存在问题
注:主要是是根据我个人的情况来解决,并不是通用的方法。主要将output设置为projectName/target/classes,就可以解决。原创 2016-11-10 00:55:34 · 2771 阅读 · 0 评论 -
Java原子变量
在 java.util.concurrent.atomic包下的类,在单个变量操作是支持原子操作的。其中的类有get和set方法和volatile变量的read和write方法一样,然而,一个set方法和随后的get方法在操作同一个变量的时候有一种happens-before关系原子的compareAndSet方法保证了内存的一致性的特性,然而在做一些简单的算术操作应用于integer原子翻译 2016-10-29 19:24:33 · 385 阅读 · 0 评论 -
Java动态代理Proxy类的解析
Java动态代理Proxy类的解析使用过代理的,对Proxy不会感到陌生,主要分析Proxy类的内部结构。一、Proxy类的结构 /** * a cache of proxy classes * 缓存java代理类 */ private static final WeakCache<ClassLoader, Class<?>[], Class<?>>原创 2016-09-17 11:28:24 · 3717 阅读 · 1 评论 -
Java反射中getXXX和getDeclaredXXX的解析
今天复习一下Java反射部分知识,想获得一写新的知识点,在网上搜了一遍基本差不多的内容。讲讲getDeclaredXXX()和getXXX(),从网上搜的知识来看说,getDeclaredXXX()能访问私有的方法或属性,getXXX()只能访问公有的方法或属性,我之前也停留在这种水平,下面分享一下今天的学习。分析getFields VS getDeclaredFields,其他的类似。原创 2016-09-14 00:25:36 · 1271 阅读 · 0 评论 -
java泛型通配符
考虑到常规打印集合所有元素的问题,然而你将写一个比较好的版本(jdk1.5以前)void printCollection(Collection c) { Iterator i = c.iterator(); for (k = 0; k < c.size(); k++) { System.out.println(i.next()); }}然而有一个幼稚的翻译 2016-07-09 14:36:19 · 576 阅读 · 0 评论 -
Java中的反射和内省简单实例
1.反射和内省 反射式在运行状态把Java类中的各种成分映射成相应的Java类,可以动态的获取所有的属性以及动态调用任意一个方法,强调的是运行状态。 内省机制是通过反射来实现的,BeanInfo用来暴露一个bean的属性、方法和事件,以后我们就可以操纵该JavaBean的属性。2.反射和内省的图一个简原创 2016-05-22 17:23:47 · 572 阅读 · 0 评论 -
String中hashCode的缓存和懒加载
下面我们通过源码来看一下hashCode的缓存和懒加载1.可以从注释看出hash的值是保存在对象中2.只有在第一次调用时产生hashCode,并保存在hash中原创 2015-12-02 23:17:20 · 1606 阅读 · 0 评论 -
Java并发之线程池Executors(二)
Executors: 一个工厂类和提供了一些工具方法,提供了返回ExecutorService,ScheduledExecutorService,ThreadFactory,Callable方法 提供了返回线程池的方法,都是静态方法例如: 一、部分方法列表public static ExecutorService newFixedThreadPool(int nThreads); //创建一个原创 2016-12-22 23:32:50 · 423 阅读 · 0 评论 -
Thread中的interrupt(),interrupted(),isInterrupted()方法的详解
1.interrupt() 使用来中断线程作用的。除非当前线程处于中断状态,这个方法总是可以被执行的。如果当前线程被Object#wait() wait(long)或者Thread#join() join(long),sleep()方法所阻塞时,然而中断状态将被清空变成false,如果被IO/NIO阻塞,使用该方法,中断状态将被设置成true,未中断状态为false,中断状态为truepub原创 2016-12-18 20:44:25 · 1063 阅读 · 0 评论 -
Scalable IO in Java的代码实现
最近在学习NIO相关的知识部分,在学习的时候,发现Doug Lea大神的一个PPT地址,里面的内容写的非常好,很值得学习,具体内容可以参见PPT和网上的文章,自己根据PPT中的例子和描述,自己将代码补充了一下。下面主要是PPT中的代码和实例。1.Basic Reactor Designpackage basic;import java.io.IOException;imp原创 2017-03-10 22:30:58 · 1615 阅读 · 2 评论 -
Java NIO和BIO读写简单比较
通过对文件的读写所花的时间来进行比较。一、读写的文件二、实例代码package nio;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.nio.ByteBuffer;import java.nio.channels.FileCha原创 2017-03-19 15:30:14 · 1867 阅读 · 2 评论 -
Java NIO笔记之IO基础概念
1.缓冲区 缓冲区是所有IO的基础,”输入/输出”就是将数据移进或移除缓冲区。进程IO操作的执行也是向操作系统发送请求,让它要么将缓冲区的数据排干(写),要么将缓冲区的填满数据(读)。 图 1-1 简单描述了数据从外部磁盘向运行中的进程的内存区域移动的过程。进程使用 read()系统调用,要求其缓冲区被填满。内核随即向磁盘控制硬件发出命令,要求其从磁盘读取数据。磁盘控制器把数据直接写原创 2017-03-06 00:04:09 · 651 阅读 · 0 评论 -
Java NIO笔记之内存映射文件
大致的原理图如下: FileChannel提供了一个map()的方法,该方法可以在一个打开的文件和一个特殊类型的ByteBuffer之间建立一个虚拟内存映射。在FileChannel上调用map( )方法会创建一个由磁盘文件支持的虚拟内存映射(virtual memory mapping)并在那块虚拟内存空间外部封装一个MappedByteBuffer对象。 MappedByteBuffer原创 2017-03-02 00:00:36 · 705 阅读 · 0 评论 -
Java并发之阻塞队列(一)
1.阻塞队列是一个增加了2个附加操作的队列,这2个操作是:当队列中元素为空时,获取元素线程会等待队列不为空,当队列满时,存储线程会等待队列中有空闲才会操作.这种操作常用于生产者和消费者的场景。阻塞队列提供了四种处理方法: 方法\处理方式 抛出异常 返回特殊值 一直阻塞 超时退出 插入方法 add(e) offer(e) put(e) offer(e,time,u原创 2016-12-31 12:49:38 · 594 阅读 · 1 评论 -
Java并发之工具类CyclicBarrier
CyclicBarrier是java并发的工具类,它允许一组线程互相等待,直到到达某个公共屏障点。因为该barrier 在释放等待线程后可以重用,所以称它为循环的barrier。CyclicBarrier 支持一个可选的 Runnable 命令,在一组线程中的最后一个线程到达之后(但在释放所有线程之前),该命令只在每个屏障点运行一次。若在继续所有参与线程之前更新共享状态。 看一下使用实例imp原创 2017-01-05 00:28:08 · 505 阅读 · 0 评论 -
JAVA并发编程笔记五
访问共享的、可变的数据要求使用同步。一个可以避免同步的方式就是不共享数据。如果数据仅在单线程中被访问,就不需要任何同步。线程封闭技术是实现线程安全的最简单的方式之一。Ad-hoc线程限制是指维护线程限制性的任务全部落在实现上的这种情况。栈限制是线程限制的一种特例,在栈限制中,只有通过本地变量才可以触及对象。本地变量本身就被限制在执行线程中,它们存在于执行线程栈。其他线程无法访问这个栈。原创 2015-12-20 16:00:15 · 557 阅读 · 0 评论 -
JAVA并发编程笔记四
发布一个对象的意思是使它能够被当前范围之外的代码所使用。比如将一个引用存储到其他代码可以访问的地方,在一个非私有的方法中返回这个引用,也可以把它传递到其他类的方法中。在很多情况下,我们需要确保对象及它们的内部状态不被暴露。一个对象在尚未准备好时就将它发布,这种情况称作逸出。1. 发布最简单的就是将对象设置到公共静态域中下面一个发布的代码public static Set原创 2015-12-20 00:29:59 · 425 阅读 · 0 评论 -
java中的String作为参数引起的一些研究
昨天在做一个关于函数参数传递的题目:下面有关java按值传递和引用传递,说法错误的是?A.char类型的传递属于按值传递B.Array类型的传递属于按引用传递C.用户自定义类型的传递属于按引用传递D.String类型的传递属于按引用传递我没有看懂Array类型是什么?java中没有Array类,果断选了B结果错了,最后看答案为D,Array类型指的是java原创 2015-09-29 14:41:29 · 2245 阅读 · 0 评论 -
hiho一下 第六十二周题目1 : Browser Caching
题目1 : Browser Caching时间限制:10000ms单点时限:1000ms内存限制:256MB描述When you browse the Internet, browser usually caches some documents to reduce the time cost of fetching them from原创 2015-09-06 21:04:07 · 589 阅读 · 0 评论 -
异常图结构
在java中,异常被分为检测异常和非检测异常,他们都符合一个类的层次结构。下面展示的是Java异常层次结构。红色的是检测异常,任意一个检测异常可能在方法中抛出,同时必须在调用的方法中捕获或抛出。检测异常必须在编译时捕获。检测异常也称之是因为java编译器和java虚拟机确保正确。绿色的是非检测异常,他们是不期望恢复的异常。原文来自:http://www.programcreek翻译 2015-08-09 16:05:05 · 560 阅读 · 0 评论 -
传统IT转互联网面试经验分享
博文转自:http://weibo.com/p/1001603859815192504915传统IT外企干了8年,两年前转互联网的,面的和被面的都不少。 这几天项目空档期,闲的蛋疼,随手写的, 不喜勿拍。 1. 算法基础 写java的基本上都是做应用系统的,用到算法的机会几乎没有,所以一般不会考。但是如果工作年限比较长,保不齐面试官怀疑你的编程能力,故意要考考,所以快排转载 2015-07-02 12:47:24 · 741 阅读 · 0 评论 -
Leetcode Longest Common Prefix (java)
Write a function to find the longest common prefix string amongst an array of strings.java code:public static String longestCommonPrefix(String[] strs) { if (strs == null || strs.length == 0)转载 2015-06-06 17:37:24 · 337 阅读 · 0 评论 -
Leetcode Length of Last Word (java)
Given a string s consists of upper/lower-case alphabets and empty space characters ' ', return the length of last word in the string.If the last word does not exist, return 0.Note: A word is原创 2015-06-06 18:06:42 · 533 阅读 · 0 评论 -
Java中的数组解析
1.在Java中,声明一个数组的过程中,内存是如何分配的? 答:在Java中声明数组后,1.在栈内存中分配内存给数组变量.2.在堆内存中分配内存给数组对象.实际上数组要初始化的是数组对象,栈内存是不用初始化的.其实Java中的引用类型都是这样的.2.Java数组的初始化共有几种方式? 答:共有三种.1.静态初始化.2.动态初始化.3.不去初始化,而是直接转载 2015-03-03 11:17:04 · 870 阅读 · 0 评论 -
慎用重载(effective java)
通过一个例子来说明:package com.test.lx;import java.util.ArrayList;import java.util.List;import java.util.Set;import java.util.TreeSet;public class SetList { public static void main(String[] args) {原创 2015-03-04 22:02:17 · 797 阅读 · 0 评论 -
java保护性拷贝(effective java)
用一个例子来说明:package com.test.lx;import java.util.Date;public class Period { private final Date start; private final Date end; public Period(Date start, Date end) { if(start.compareTo(end)>原创 2015-03-04 20:16:15 · 717 阅读 · 0 评论 -
Integer类的缓存机制
下面的程序public class IntegerTest{public static void main(String[] args){ Integer a1 = 100; Integer a2 = 100; System.out.println(a1==a2); Integer b1 = 200;原创 2015-10-18 14:05:31 · 1213 阅读 · 0 评论 -
简单自定义Annotation和利用反射获取注解中的值
用一个简单例子自定义注解:import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;/** * * */@Retention(RetentionPolicy.RUNTIME)public @interface MyAnnotation{ public String原创 2015-10-20 00:33:59 · 6819 阅读 · 0 评论 -
JAVA并发编程笔记三
每个java对象都可以隐式地扮演一个用于同步的锁的角色,这些内置的锁被称做内部锁。内部锁在java中扮演了互斥锁的角色,意味着至多只有一个线程可以拥有锁,当线程A尝试请求一个被线程B占有的锁是,线程A必须等待或者阻塞,知道B释放他。如果B永远不释放锁,A将永远等下去。重进入 当一个线程请求其他线程已经占有的锁时,请求线程将被阻塞。然而内部锁是可重进入的,因此线程在试图获得它自己原创 2015-12-18 22:05:40 · 482 阅读 · 0 评论 -
JAVA并发编程笔记二
共享是指一个变量可以被对个线程访问。可变是指变量的值在其生命周期内可以改变。对于一个对象是否应该是线程安全的取决于它是否被多线程访问。线程安全的这个性质,取决于程序中如何使用对象,而不是对象完成了什么。保证对象的线程安全性需要使用同步来协调对其可变状态的访问,若是做不到这点,就会导致脏读数据和其他不可预期的后果。 无论何时,只要有多于一个线程访问给定的状态变量,而且其中某个线程会写入原创 2015-12-13 23:52:30 · 428 阅读 · 0 评论 -
java并发之Semaphore(计数信号量)
Semaphore一个计数信号量。从概念上讲,信号量维护了一个许可集。如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可。每个 release() 添加一个许可,从而可能释放一个正在阻塞的获取者。但是,不使用实际的许可对象,Semaphore 只对可用许可的号码进行计数,并采取相应的行动。Semaphore 通常用于限制可以访问某些资源(物理或逻辑的)的线程数目。原创 2015-11-29 00:32:35 · 552 阅读 · 0 评论 -
JAVA并发编程笔记一
线程有时候被称为轻量级进程,并且大多数现代操作系统把线程作为时序调度的基本单元,而不是进程。在没有明确协调的情况下,线程相互间同时或异步地执行。因为线程共享其所属进程的内存地址空间,因此所有统一进程中的线程访问相同的变量,并从同一个堆中分配对象,这相对于进程间通信机制来说实现良好的数据共享。但是如果没有明确的说明同步来管理共享数据,一个线程可能会修改其他线程正在使用的数据,产生意外的结果。原创 2015-12-13 01:02:31 · 391 阅读 · 0 评论 -
用java中的URL读取网页信息
在java可以使用URL读取网页信息(类似爬虫)code:import java.io.File;import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream;import java.net.URL;public class Url2{ public static原创 2015-11-02 22:23:04 · 980 阅读 · 0 评论 -
Java NIO - 非阻塞 IO和复用
传统的IO一般都是阻塞的。例如传统的socket的连接是阻塞的,在服务器等待客户端连接的时候和当客户端连接得到一个独立的线程处理客户端的操作。java nio是非阻塞的,在一个线程不须要等待读和写事件。它主要是复用,用下面一个概念来解释:想象一下你进一个餐厅里有一个桌子,一个服务员。如果餐厅经理安排每一个桌子一个服务员,餐厅就很容易停业了。然而一个服务员可以负责多张桌子而不是持续的翻译 2015-11-22 00:58:09 · 2087 阅读 · 0 评论 -
java nio socket通信简单入门示例
基本的Java套接字对于小规模系统可以很好地运行,但当涉及到要同时处理上千个客户端的服务器时,可能就会产生一些问题.由于创建、维护和切换线程需要的系统开销,一客户一线程方式在系统扩展性方面受到了限制。使用线程池可以节省那种系统开销,同时允许实现者利用并行硬件的优势。但对于连接生存期比较长的协议来说,线程池的大小仍然限制了系统可以同时处理的客户端数量。考虑一个在客户端之间传递消息的即时消息服务器(I原创 2015-11-22 12:11:09 · 807 阅读 · 0 评论 -
NIO的简单例子
一个最简单的NIO socket代码:import java.net.InetSocketAddress;import java.nio.ByteBuffer;import java.nio.channels.ServerSocketChannel;import java.nio.channels.SocketChannel;public class ChannelAccept{原创 2015-11-15 22:04:02 · 1358 阅读 · 0 评论 -
java类加载和常量的小例子
通过下面的两个例子简单了解一下常量与类的加载的关系。class FinalTest{ static { System.out.println("static block "); } public static final int a = 6/3; }public class Test1{ public static void main(String[] args)原创 2015-11-07 21:58:02 · 1642 阅读 · 1 评论