`
文章列表
//可以存取线程局部变量 //先看构造函数 public ThreadLocal() { } //设置值 public void set(T value) { Thread t = Thread.currentThread(); //这个Map以this为key ThreadLocalMap map = getMap(t); if (map != null) map.set(this, value); else createMap(t, v ...
//一个操作集合的工具类,里面全部都是静态方法。 //根据元素的自然顺序进行排序 public static <T extends Comparable<? super T>> void sort(List<T> list) { //转为array Object[] a = list.toArray(); //排序 Arrays.sort(a); ListIterator<T> i = list.listIterator(); //设置值 ...
//用于线程间交换数据 public V exchange(V x) throws InterruptedException { if (!Thread.interrupted()) { Object v = doExchange((x == null) ? NULL_ITEM : x, false, 0); if (v == NULL_ITEM) return null; if (v != CANCEL) return (V) ...

读EnumSet源码

//一个基于枚举的Set,其效率在大多数时候都比HashSet高。 //该类是一个抽象类其实现类有RegularEnumSet和JumboEnumSet。 //创建一个最初包含指定元素的枚举(带of的方法实现基本都一样) public static <E extends Enum<E>> EnumSet<E> of(E e) { EnumSet<E> result = noneOf(e.getDeclaringClass()); result.add(e); return re ...

读EnumMap源码

//一个key是枚举类型的map,速度基本会比hashMap更快 //先看构造函数 //构造指定键类型的EnumMap public EnumMap(Class<K> keyType) { this.keyType = keyType; //获取key的枚举值 keyUniverse = getKeyUniverse(keyType); vals = new Object[keyUniverse.length]; } public EnumMap(EnumMap<K, ? extends V ...
//和HashMap的主要区别在于判断key的相等采用的是== //该map计算hash值使用的是System.identityHashCode方法。 //并且该Map内部将键存在i位置,值存在i+1位置上。 //先看构造函数: public IdentityHashMap() { init(DEFAULT_CAPACITY); } //初始化2倍initCapacity大小的map private void init(int initCapacity) { threshold = (initCapacity ...

读Stack源码

//一个堆栈结构的集合(先进后出)继承于Vector //基本已被ArrayDeque取代 //先看构造函数 public Stack() { } //新增一个元素 public E push(E item) { addElement(item); return item; } public synchronized void addElement(E obj) { modCount++; ensureCapacityHelper(elementCount + 1); ...

java编译编码问题

    博客分类:
  • java
最近由一个编码问题。让我对另一个编码问题产生了疑惑。 即我们在写java源文件的时候一般使用的是utf-8编码,但是tomcat控制台(直接在bin里面启动的那个黑窗口)编码是gbk.为什么tomcat控制没有乱码问题? 最开始我想的是既然我的java源文件是按照utf-8编码,那么最后必须按照utf-8解码才不会有问题啊。为什么tomcat用gbk解码没有乱码问题? 然后查了下javac编译过程:    当javac编译的时候会根据-Dfile.encoding参数来进行编译,-Dfile.encoding,一般为系统默认字符,windows下为gbk。当我们在ecplise下编写文件 ...
//一个管理线程创建的类里面都是静态方法 //创建一个corePoolSize和maximumPoolSize相等的线程池也就是当线程数为nThreads时,就不在新增线程了。 public static ExecutorService newFixedThreadPool(int nThreads) { return new ThreadPoolExecutor(nThreads, nThreads, 0L, TimeUnit.MILLISECONDS, ...
//一个基于弱引用的Map对象 //先看构造函数 public WeakHashMap() { this(DEFAULT_INITIAL_CAPACITY, DEFAULT_LOAD_FACTOR); } public WeakHashMap(int initialCapacity) { this(initialCapacity, DEFAULT_LOAD_FACTOR); } public WeakHashMap(Map<? extends K, ? extends V> m) { t ...
//一个双端队列 比stack和LinkedList效率高 //先看构造函数 public ArrayDeque() { elements = (E[]) new Object[16]; } public ArrayDeque(int numElements) { allocateElements(numElements); } private void allocateElements(int numElements) { int ...
//一个可以延迟执行的定时任务 //先看构造函数 构造函数最重要的区别是传入了DelayedWorkQueue一个延迟的queue /** 总结:该线程池继承了ThreadPoolExecutor。同时内部封装了一个DelayedWorkQueue和 ScheduledFutureTask。DelayedWorkQueue用于管理任务的新增和获取。ScheduledFutureTask 用于管理任务的执行。 */ public ScheduledThreadPoolExecutor(int corePoolSize) { super(corePoolS ...
//线程池 //先看构造方法 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue) { this(c ...
//他是ExecutorService的部分实现 public abstract class AbstractExecutorService implements ExecutorService //提交一个Runnable任务给AbstractExecutorService执行返回Future public Future<?> submit(Runnable task) { if (task == null) throw new NullPointerException(); RunnableFuture<Void> f ...
//一个用来管理已完成任务的service,内部封装了一个队列。 //它是CompletionService的一个实现 public class ExecutorCompletionService<V> implements CompletionService<V> //先看构造函数 public ExecutorCompletionService(Executor executor) { if (executor == null) throw new NullPointerException(); ...
Global site tag (gtag.js) - Google Analytics