![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 81
wyc_
技术之路是千里之行,莫功利方能行更远
展开
-
Java op= 运算符
E1 op= E2 is equivalent to E1 = (T)((E1) op (E2)), where T is the type of E1, except that E1 is evaluated only once.原创 2014-11-08 15:19:03 · 2573 阅读 · 0 评论 -
深入理解Java内存模型(三)——顺序一致性
数据竞争与顺序一致性保证当程序未正确同步时,就会存在数据竞争。java内存模型规范对数据竞争的定义如下:在一个线程中写一个变量,在另一个线程读同一个变量,而且写和读没有通过同步来排序。当代码中包含数据竞争时,程序的执行往往产生违反直觉的结果(前一章的示例正是如此)。如果一个多线程程序能正确同步,这个程序将是一个没有数据竞争的程序。JMM对正确同步的多线程程序的内存一转载 2014-11-26 11:54:34 · 409 阅读 · 0 评论 -
Java IO (I)
一、IO基础Java中的IO可以分为两类:byte- and number-oriented I/O,这种类型由InputStream和OutputStream处理;character and text I/O,这种类型由Reader和Writer处理。两种类型都实现了对外部数据源或目的抽象,输入流就好比用吸管从容器中抽水,而输出流就好比用水管向容器中注水,流的概念屏蔽了底层的细节,使得我们可原创 2014-10-23 11:37:21 · 606 阅读 · 0 评论 -
Java IO (II)
一、 Filter StreamsFilter input streams从预先存在的输入流中读取数据,并且可以在将其写入客户端程序之前有一次处理和改变它的机会。Filter output streams向预先存在的输出流中写入数据,并且在将数据写入到基础流之前有一次可以处理和改变它的机会。多个filters可以链接到同一个基础流上。Filter streams 可以用于加密,压缩原创 2014-10-25 17:56:53 · 662 阅读 · 0 评论 -
Java泛型总结
一、介绍1.1泛型看一下使用泛型和不使用泛型的区别:使用泛型:List words = new ArrayList();words.add("Hello ");words.add("world!");String s = words.get(0)+words.get(1);assert s.equals("Hello world!");同样的代码不使用泛型:原创 2014-11-01 17:56:13 · 921 阅读 · 0 评论 -
《Java Generics and Collections》笔记 Set
1. HashSet冲突问题扩容问题If the size of the hash table is fixed, performance will worsen as more elements are added and the load increases. To prevent this from happening, the table size is原创 2014-11-10 17:06:29 · 916 阅读 · 0 评论 -
《Java Generics and Collections》笔记-Lists/Maps
前面主要是在介绍用法,省去不写。List subList(int fromIndex, int toIndex)// return a view of a portion of the listThe returned list has no separate existence. it is just a view of part of the list from which i原创 2014-11-02 20:34:51 · 1865 阅读 · 0 评论 -
CopyOnWriteArrayList与java内存模型
关于CopyOnWriteArrayList的介绍可以参考之前文章中的CopyOnWriteArrayList、CopyOnWriteArraySet(其中分析了它的特点以及适合的使用场景,建议看一下)。本文原本是打算分析CopyOnWriteArrayList的源码的,结果看了一下其源码实现比较简单,只是有一个地方很难理解。本文就只探讨这个点。相关代码如下: /** The array,原创 2016-08-21 16:34:57 · 846 阅读 · 1 评论 -
java比赛题目
比赛中的一些题目,记录一下1.如下代码:byte[] array1,array2[];byte array3[][];int[][] array4;假设每个数组都已经被正确初始化了,下面哪个语句会产生编译错误?A array2 = array1;B array2 = array3;C array2 = array4;2.import java.util.*;原创 2015-04-19 20:34:19 · 1683 阅读 · 0 评论 -
深入理解Java内存模型(四)——volatile
volatile的特性当我们声明共享变量为volatile后,对这个变量的读/写将会很特别。理解volatile特性的一个好方法是:把对volatile变量的单个读/写,看成是使用同一个锁对这些单个读/写操作做了同步。下面我们通过具体的示例来说明,请看下面的示例代码:class VolatileFeaturesExample { //使用volatile声明64位的long型变转载 2014-11-26 11:52:20 · 332 阅读 · 0 评论 -
深入理解Java内存模型(五)——锁
锁的释放-获取建立的happens before 关系 锁是java并发编程中最重要的同步机制。锁除了让临界区互斥执行外,还可以让释放锁的线程向获取同一个锁的线程发送消息。 下面是锁释放-获取的示例代码:class MonitorExample { int a = 0; public synchronized void write转载 2014-11-26 11:08:58 · 244 阅读 · 0 评论 -
深入理解Java内存模型(六)——你真的了解final吗
与前面介绍的锁和volatile相比较,对final域的读和写更像是普通的变量访问。对于final域,编译器和处理器要遵守两个重排序规则: 1、在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序。 2、初次读一个包含final域的对象的引用,与随后初次读这个final域,这两个操作之间不能重排序。 下面,我们转载 2014-11-26 10:43:05 · 366 阅读 · 0 评论 -
《疯狂Java讲义》笔记
1.class Parent{public String tag = "疯狂java讲义";}class Derived extends Parent{private String tag = "tag会覆盖掉父类中的tag";}public class HideTest{public static void main(String[] args){原创 2014-10-12 11:19:59 · 1168 阅读 · 0 评论 -
多线程概念
本文概念性的介绍和一些基本的多线程知识居多。状态:一个对象的状态就是它的数据,存储在状态变量中。比如实例域或静态域。对象的状态还包括附属对象的域,比如HashMap的状态一部分存储到对象本身中,同时也存储到很多Map.Entry对象中。共享:是指一个变量可以被多个线程访问。可变:是指变量的值在其生命周期内可以改变。任何时候,只要有多于一个线程访问给定的状态变量,而且其中某个线程会写原创 2014-11-29 09:06:38 · 405 阅读 · 0 评论 -
Java IO mark() reset()
最近在学习Java IO的时候,mark()和Reset()操作有点糊涂。原创 2014-11-10 10:34:35 · 966 阅读 · 1 评论 -
深入理解Java内存模型(二)——重排序
数据依赖性如果两个操作访问同一个变量,且这两个操作中有一个为写操作,此时这两个操作之间就存在数据依赖性。数据依赖分下列三种类型:名称代码示例说明写后读a = 1;b = a;写一个变量之后,再读这个位置。写后写a = 1;a = 2;写一个变量之后,再写这个变量。读后写a = b;b = 1;读一个变量之后转载 2014-11-26 11:55:34 · 311 阅读 · 0 评论 -
深入理解Java内存模型(一)——基础
并发编程模型的分类在并发编程中,我们需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体)。通信是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递。在共享内存的并发模型里,线程之间共享程序的公共状态,线程之间通过写-读内存中的公共状态来隐式进行通信。在消息传递的并发模型里,线程之间没有公共状态,线程之间必转载 2014-11-26 11:56:38 · 611 阅读 · 0 评论 -
JVM 自定义的类加载器的实现和使用
1、用户自定义的类加载器:要创建用户自己的类加载器,只需要扩展java.lang.ClassLoader类,然后覆盖它的findClass(String name)方法即可,该方法根据参数指定类的名字,返回对应的Class对象的引用。findClassprotected Class findClass(String name) throws转载 2015-01-28 19:25:58 · 468 阅读 · 0 评论 -
《Java Generics and Collections》笔记-Queue II
14.2. Implementing Queue14.2.1. PriorityQueueYour application will dictate which alternative to choose: if it needs toexamine and manipulate the set of waiting tasks, use NavigableSet.原创 2014-11-15 09:21:03 · 542 阅读 · 0 评论 -
关于Java增补字符
Unicode码空间为U+0000到U+10FFFF,一共1114112个码位,其中U+0000 到U+FFFF的部分被称为基本多语言面(Basic Multilingual Plane,BMP)。U+10000及以上的字符称为增补字符。在Java中(Java1.5之后),增补字符使用两个char型变量来表示。第一个char型变量的范围称为“高代理部分”(high-surrogates range原创 2015-04-16 20:47:02 · 3741 阅读 · 0 评论 -
HashMap源码分析
这篇文章我们来分析一下HashMap的源码实现,这里只分析比较重要的部分,而且并不打算按照源码顺序分析,那样会比较乱。文件位置:jdk/src/share/classes/java/util/HashMap.java先看一下它的继承关系java.lang.Objectjava.util.AbstractMapjava.util.HashMap原创 2015-04-16 21:59:00 · 1065 阅读 · 0 评论 -
《Java Generics and Collections》笔记 Queues I
简单的看一下它特有的几个方法boolean offer(E e) // insert the given element if possibleThe methods that throw an exception for an empty queue are:E element() // retrieve but do not remove the head elemen原创 2014-11-12 16:26:31 · 655 阅读 · 0 评论 -
java泛型常见问题
java泛型的通过对变量进行类型限制,使得在编译阶段尽可能发现更多的错误,因此强化了类型安全,同时消除了许多强制类型转换。为了与JDK5.0之前的版本保持兼容,编译器会把泛型代码首先转换为不带泛型的代码,具体分为以下几步:1.将参数化类型中的类型参数"擦除"(erasure)掉;2.将类型变量用"上限(upper bound)"取代,通常情况下这些上限是 Object。这里的类型变量是指实原创 2014-12-14 21:24:32 · 575 阅读 · 0 评论 -
LinkedHashMap源码分析
26 package java.util; 27 import java.io.*;147 public class LinkedHashMap148 extends HashMap149 implements Map150 {151 152 private static final long serialVersionUID = 380原创 2016-07-18 10:48:03 · 728 阅读 · 0 评论 -
关闭输出流时Socket的行为(stackoverflow)
stackoverflow上的一个提问,原创 2014-11-06 20:42:53 · 939 阅读 · 0 评论 -
组合线程安全类
本文是个人对如何使用线程安全的组件组合线程安全类的一些理解。首先从设计线程安全类说起。怎么设计线程安全类,这跟我们平时解数学题一样,告诉我们变量的范围,根据给出的约束条件,选择合理的方案找出符合要求的答案。这里也是一样的,首先要明确对象的状态由那些变量构成,然后要确定限制状态变量的不变约束,最后制定出一个协调并发访问对象状态的策略。其中对象的状态是由对象的域组成的,需要注意的是如果对象的域原创 2014-11-27 21:22:51 · 493 阅读 · 0 评论