Java基础
文章平均质量分 84
kainever
这个作者很懒,什么都没留下…
展开
-
阻塞队列
参考 聊聊并发(七)——Java中的阻塞队列 阻塞队列(BlockingQueue)1. 阻塞队列很高级吗? - 不要畏惧!,对个线程访问阻塞队列的共享资源的时候,严格按照队列的规矩,先进先出! - 队列满了,就阻塞,队列空了,也阻塞!这样在,生产者-消费者模型中,可以用一个阻塞队列来 - 存放生产的(共享资源)! - 好处; 多线程操作共同的队列时不需要额外的原创 2015-07-25 22:16:12 · 433 阅读 · 0 评论 -
ReentrantReadWriteLock
感谢:多线程基础总结八--ReentrantReadWriteLock ReentReadWriteLock // 可重入的读/写锁 - 它和ReentrantLock都是单独的实现,不存在继承,实现的关系! - 它分读锁 和 写锁两部分!readLock() 和 writeLock() - 多个线程可以同时对一块资源进行读!但是,这是就不能进行写了!排斥写 ,因原创 2015-07-25 22:16:39 · 328 阅读 · 0 评论 -
Java NIO --- 网络编程相关
参考: Java NIO 系列教程 NIO 与 IO 的区别 NIO :面向缓冲区 非阻塞 IO: 面向流 阻塞 以网络编程为例,在服务端如果使用传统的IO,我们一般对每一个客户端的连接都会先得到Socket 然后new 一个新的线程来处理,而对于NIO的处理,一个线程就可以管理多个连接 .原创 2015-07-25 22:20:18 · 283 阅读 · 0 评论 -
ThreadLocal总结
原文: ThreadLocal-分析-总结 网上虽然很多关于ThreadLocal , 但是这篇文章,从源码角度进行剖析 ,让你不得不信服,Thanks! 以前,对ThreadLocal 错误的理解: 它内部维护了一个map,然后,这个map的key是本地线程的标志,value则是线程不安全的对象 其实,不是这样的: 1. ThreadLocal 中有个内部类,Threa原创 2015-07-25 22:20:01 · 334 阅读 · 0 评论 -
Add Two Number
You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a link原创 2015-07-25 22:19:09 · 411 阅读 · 0 评论 -
对象序列化字节流 与 字节流发序列化为对象
import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;/* * 对象序列化为字节流 *原创 2015-07-25 22:20:24 · 661 阅读 · 0 评论 -
泛型的几点注意
1. 什么是泛型中的限定通配符和非限定通配符? 限定通配符对类型进行了限制。有两种限定通配符,一种是,它通过确保类型必须是T的子类来设定类型的上界,另一种是它通过确保类型必须是T的父类来设定类型的下界。泛型类型必须使用限定内的类型来进行初始化,否则会导致编译错误。另一方面表示非限定通配符,因为可以用任意类型来代替。 2. List , List,List ,List四种情形的注意原创 2015-07-25 22:16:27 · 296 阅读 · 0 评论 -
重排序 初闻 volatile and JMM
参考深入理解Java内存模型 《深入理解Java内存模型》读书总结 1.重排序是怎么一回事? - 编译器排序 和 运行期重排序 - 访问一个程序变量(对象实例字段,类静态字段和数组元素)可能会使用不同的顺序执行, 而不是程序语义所指定的顺序执行。编译器能够自由的以优化的名义去改变指令顺序。 如果一个线程写 入值到字段a,然后写入值到字段b,而且b的值不依赖原创 2015-07-25 22:15:58 · 1008 阅读 · 0 评论 -
Concurrent的实现
来源: 深入理解Java内存模型(五)——锁 java的CAS同时具有 volatile 读和volatile写的内存语义, 因此Java线程之间的通信现在有了下面四种方式: 线程写volatile变量,随后B线程读这个volatile变量。 线程写volatile变量,随后B线程用CAS更新这个volatile变量。 线程用CAS更新一个volatile变量,随后B线原创 2015-07-25 22:17:14 · 740 阅读 · 0 评论 -
FutureTask
参考 :Runnable、Callable、Executor、Future、FutureTask关系解读Future和FutureTask 一个很好的例子 , /** * 通过简单的测试程序来试验Runnable、Callable通过Executor来调度的时候与Future的关系 */ package com.hadoop.thread; impo原创 2015-07-25 22:17:08 · 267 阅读 · 0 评论 -
synchronized 及 线程通信
线程通信推荐文章线程通信通信方式共享对象wait notify 和 notifyAll机制 (并发包中的Condition)注意点不要在字符串常量或全局对象中调用wait(),因为可能调用notify或notifyAll的时候 不知道唤醒了哪一个,或者为什么都唤醒了?因为多个引用指向的是同一个对象!丢失信号:如果一个线程先于被通知线程调用wait()前调用了notify(),等待的线程将原创 2015-08-03 22:46:09 · 417 阅读 · 0 评论 -
Java 集合类的一点总结
今天碰到的一个异常:java.util.HashMap$Values cannot be cast to java.util.List 因为我想这样:ListList<List<String>> groups = new ArrayList<> ( map.values());集合类结构图: 数组与集合类之间的转换集合 -> 特定类型的数组:List<String> group = gro原创 2015-08-16 12:44:43 · 512 阅读 · 0 评论 -
ThreadPoolExecutor 原理
来源 :【java并发】juc Executor框架详解 Java线程池架构原理和源码解析(ThreadPoolExecutor) 1. Executor整体架构: Executor 接口定义了最基本的 execute 方法,用于接收用户提交任务。ExecutorService 定义了线程池终止和创建及提交 futureTask 任务支持的方法。 A原创 2015-07-25 22:17:25 · 418 阅读 · 0 评论 -
链表拷贝元素到另一个链表,结果发现后面的元素覆盖了前面的
private List tranformList(List ts) { List topics = new ArrayList (); // 注册装换器 EntityVoConverter evc = new EntityVoConverter(); ConvertUtils.register(evc, VCategory.class); ConvertUtils.原创 2015-07-25 22:15:41 · 966 阅读 · 0 评论 -
关于HashMap HashSet Hashtable TreeMap的一点总结
HashMap put(key , value) 的大致过程 :在HashMap 中 ,值是存储在 Entry 类型 的数组table里面而这个Entry 就是链表节点类型 , 也就是说它是利用拉链法来处理冲突的;如果发生冲突,它会检查是否两者的key也相等,如果相等,直接替换,如果不等,那么就会插入在链表的头部key的hashcode()方法用来找到Entry对象所在的桶。 ta原创 2015-07-25 22:14:20 · 500 阅读 · 0 评论 -
Join方法小结
Join 方法的意思就是后面的线程要运行 ,只有调用join方法的这个线程is dead 或 超过指定的时间,才能执行;public final void join() //只有当前线程isdead 后面的才能运行 public final synchronized void join(long millis) // 线程isdead or over millis publ原创 2015-07-25 22:16:06 · 338 阅读 · 0 评论 -
依赖 关联 聚合 组合
参考 :blog 依赖关系 : 在Java语言中体现为局域变量、方法的形参,或者对静态方法的调用。class Driver { //使用形参方式发生依赖关系 public void drive1(Car car){ car.run(); } //使用局部变量发生依赖关系 public void原创 2015-07-25 22:15:06 · 301 阅读 · 0 评论 -
PriorityQueue 优先级队列
1. 去哪儿面试的时候,被问到java源代码中有用到堆的地方吗? 我不假思索的回到,没有!因为当初压根就没有用到过Queue相关的类! PriorityQueue就是通过Heap实现的。Heap通过数组模拟的! 分析下他维护堆的性质,以及删除首元素时,源代码中采用的手段: 因为PriorityQueue模拟的是队列,所以就必须遵循FIFO,原创 2015-07-25 22:16:50 · 368 阅读 · 0 评论 -
用AtomicStampedReference解决ABA问题(转)
原文 : http://blog.hesey.net/2011/09/resolve-aba-by-atomicstampedreference.html在运用CAS做Lock-Free操作中有一个经典的ABA问题:线程1准备用CAS将变量的值由A替换为B,在此之前,线程2将变量的值由A替换为C,又由C替换为A,然后线程1执行CAS时发现变量的值仍然为A,所以CAS成功。但实际上这时的现场原创 2015-07-25 22:17:19 · 1129 阅读 · 0 评论 -
enum枚举类的一个简单例子
定义一个枚举类: public enum Time {// 通过构造方法给常量传值 DATE1("2016-6-26 12:14:10"), DATE2("2016-6-26 12:14:10"), DATE3("2016-6-26 12:14:10"), DATE4("2016-6-26 12:14:10"), DATE5("2016-6-26 12:14:10"原创 2015-07-25 22:22:19 · 5028 阅读 · 0 评论 -
循环数组 and ArrayDeque
我竟然今天才知道循环数组这个概念! 1. 怎么实现循环? 通过首尾两个下标!如果尾下标的下一个就是头下标,那么队列就满了?但是怎么知道尾下标的下一个了?可一通过下标与数组长度取余! 还有就是如果首尾相等,那么这这个队列为空! ArrayDeque 就是通过一个循环数组实现的!它判断队列是否满了或者获得前一个元素?通过: 分析源码的过程原创 2015-07-25 22:16:45 · 355 阅读 · 0 评论 -
可重入锁 ReentrantLock
推荐 : ReentrantLock与synchronized1. 什么是可重入锁? - “就是可以重新获得锁!”可重入的意思是线程可以重复获得它已经持有的锁。Java的synchronized块是可重入的。 看下面代码 :public class Reentrant{ public synchronized outer(){ inner(); } publ原创 2015-07-25 22:16:33 · 362 阅读 · 0 评论 -
Java 注解
看例子 : 自定义注解: import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@Target ({E原创 2015-07-25 22:20:13 · 350 阅读 · 0 评论 -
hashcode()方法 及 HashMap再分析
之前 , 听过很多次,重写equals()方法的时候,必须重写hashcode() , 两个对象equals,hashcode()必然相等,两个对象hash值相等,当时不一定equals; 那么 究竟hashcode 是什么?起的作用又是什么? hashcode() 和 equals() 方法都是Object(终极父类)中的方法; 如果子类 没有重写 , 那么就默认原创 2015-07-25 22:19:44 · 362 阅读 · 0 评论 -
Java基本数据类型 及 位操作
最近在笔试时,经常遇到一些与基本数据类型有关的问题,比如他们的长度所占的字节数目啊,以及相应的为操作啊,所以,这次来做一下总结 ; 四种基本整数数据类型 : 所占字节数目按 2^n增长..... 注意,计算计数范围时,最高位表示的符号位! 注意 : 如果超过了他们范围,怎么办,见例子! 剩下的就是 float , double , char , blooea原创 2015-07-25 22:18:41 · 373 阅读 · 0 评论 -
ObjectInputStream and ObjectOutputStream
今天遇到的一个问题 : 程序运行时, ObjectOutputStream 写入的对象,我可以通过ObjectInputStream 读出来,可是,当我关闭程序,然后下次再代开程序的时候,我有不能从文件中读到数据了,而且,还报可恶的EOFException,原因就在于,我在用ObjectInputStream读文件之前,就已经让 ObjectOutputStream 与文件建立了连原创 2015-07-25 22:14:14 · 347 阅读 · 0 评论 -
Java的构造方法
看下面的例子,觉得应该输出什么? public class A { public A() {//先把下面这句去掉//System.out.println(this.getClass()); set(); } void set() { System.out.println("A"); } static class B extends A原创 2015-07-25 22:20:30 · 262 阅读 · 0 评论 -
synchronized , wait() , notify() and notifyAll()
!!!!!!!!!!........................................ 这三个东西,很容易,也很容易理解,几句话就轻松搞定了。 synchronized : 同一时刻只能有一个对象持有锁! wait() : 当前线程会进入阻塞状态,并放弃锁 notify() :则会叫醒某一个线程 notifyAll():会叫醒所有线程原创 2015-07-25 22:21:24 · 232 阅读 · 0 评论