![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JAVA
文章平均质量分 68
ltnb
一步一个脚印
展开
-
Java学习笔记-泛型及类型擦除
Java泛型代码在反编译后已经没有泛型,被替换为原来的类型,并且在相应读取数据的地方,插入了强制转换代码。所以运行时,ArrayList<Integer>与ArrayList<String>就是相同的类型。泛型在java中,实际上是一颗语法糖,实现方式为类型擦除,是一种伪泛型。原创 2015-01-28 21:17:24 · 481 阅读 · 1 评论 -
Java并发学习笔记(五)-显示锁
究竟采用内置锁还是显示锁?性能上,java6以后,两者性能比较接近。不过程序运行平台差别大,生产环境可能在必要的时候进行尝试才能确定性能的优缺。显示锁的可轮询,可定时,可中断也是我们选择显示锁的原因。但是内置锁也有比较大的优势。开发人员熟悉内置锁,内置锁简洁紧凑,程序中已经大量使用内置锁,最主要的是,显示锁的危险性比较高,开发人员绝对不能忘记在finally中调用unlock。所以一般还是使用内置锁,只有在内置锁无法满足需求,或者调优的情况下才使用显示锁。原创 2015-02-15 09:19:39 · 813 阅读 · 0 评论 -
Java并发学习笔记(九)-原子类AtomicInteger
AtomicInteger能够保证对一个整型的操作是原子性。像i++这个操作不是原子操作,存在竞态条件,所以需要加锁,但是加锁的性能不高,如果仅仅为了对一个整数加1。我们来看下他的实现。 private volatile int value;AtomicInteger本身持有一个整型变量,所有的操作都是基于这个变量的。变量由violate修饰,这个变量是保证可见性的,具体可见另一原创 2015-03-27 19:28:04 · 980 阅读 · 0 评论 -
Java并发学习笔记(八)-LinkedBlockingQueue
LinkedBlockingQueue是由链表组成的阻塞队列,先来看demo public class LinkedBlockingQueueDemo { public static void main(String[] args) { ExecutorService es = Executors.newCachedThreadPool(); BlockingQueue<...原创 2015-03-27 17:27:46 · 712 阅读 · 0 评论 -
Integer的MIN_VALUE
遇到一个理所当然但是又没注意到的问题。在JDK中,整形类型是有范围的,最大值为Integer.MAX_VALUE,即2147483647,最小值为Integer.MIN_VALUE -2147483648。对整形最大值加1,2147483648(越界了),那么此时值为多少呢?结果是-2147483648,即是Integer.MIN_VALUE。类似的,对Integer.MIN_VA原创 2015-03-06 20:54:04 · 24474 阅读 · 5 评论 -
Java并发学习笔记(七)-ArrayBlockingQueue
Java并发包concurrent里提供了3个阻塞队列,ArrayBlockingQueue,LinkedBlockingQueue,PriorityBlockingQueue。阻塞队列通常用于生产消费模式,满队列时生产者阻塞,空队列时消费者阻塞。(一) ArrayBlockingQueueArrayBlockingQueue是一个有界的阻塞队列,底层实现是一个数组。public cl原创 2015-02-20 16:03:57 · 1785 阅读 · 1 评论 -
java.lang.IllegalMonitorStateException
java.lang.IllegalMonitorStateException 违法的监控状态异常。当某个线程试图等待一个自己并不拥有的对象(O)的监控器或者通知其他线程等待该对象(O)的监控器时,抛出该异常。//计算线程public class Calculator extends Thread { int total; public void run() { synchroni转载 2015-02-16 07:49:05 · 1863 阅读 · 0 评论 -
MappedByteBuffer的映射内存的释放
MappedByteBuffer的内存释放,主要由垃圾回收引起的。首先,来看一下Oracle的bug list,这是一个无法修复的bug,所以在使用MappedByteBuffer的时候一定要注意内存的释放。第一个case是:import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoun原创 2015-01-20 16:17:14 · 8346 阅读 · 3 评论 -
访问私有变量,私有方法
我们都知道Java的访问权限分为public,包,protected,privated。没有相应的访问权限是无法访问类,对象,变量,方法等。我们都知道单例模式,是把构造方法私有化,其它类就无法创建该类的新对象,只能获得已经产生的对象。但是通过反射,我们可以访问到原来无法访问的变量,方法等。package com.test.reflection;public class Customer {原创 2015-02-04 17:03:49 · 2527 阅读 · 0 评论 -
Java学习笔记-JVM内存管理
一、Java内存区域Java虚拟机把运行时数据区划分为几个不同的区域。线程私有的,即每一条线程都会有自己独立的内存空间,有以下几个部分:程序计数器虚拟机栈本地方法栈所有线程共享的内存空间,包括:堆方法区1、线程私有数据区程序计数器程序计数器比较小,保存当前线程所执行字节码的行号,字节码解释器工作时就是根据计数器的值来执行的。每一条线程都有自己原创 2015-01-29 19:10:43 · 528 阅读 · 0 评论 -
多线程下的单例模式
相信大家都对单例模式非常熟悉了,可以利用单例模式重复使用某个对象。有一次面试的时候,问到了单例模式,终于明白自己对线程模式下的单例模式不是很了解。饿汉式单例模式是线程安全的,但是它在加载类时就创建实例,不管实例用不用地到,考虑到效率问题,所以个人更喜欢懒汉式单例模式(延迟加载),于是面试题就根据懒汉式单例模式展开。首先,我们来写一个单线程下的懒汉式单例模式public class Sing原创 2015-04-01 20:52:11 · 658 阅读 · 0 评论