`
BrokenDreams
  • 浏览: 249355 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
68ec41aa-0ce6-3f83-961b-5aa541d59e48
Java并发包源码解析
浏览量:98099
社区版块
存档分类
最新评论
文章列表
Jdk1.6 JUC源码解析(4)-atomic-AtomicStampedReference、AtomicMarkableReference 作者:大飞   功能简介: 为了避免CAS过程中的ABA问题,并发包提供了两个类,AtomicStampedReference和AtomicMarkableReference。前者相当于一个[引用,integer]的二元组,后者相当于一个[引用,boolean]的二元组。 AtomicStampedReference可用来作为带版本号的原子引用,而AtomicMarkableReference可用于表示如:已删除的节点。       ...
Jdk1.6 JUC源码解析(3)-atomic-AtomicXXXFieldUpdater 作者:大飞   功能简介: 原子域更新器,一般用于一些原子同步结构中。   源码分析: 首先看下AtomicIntegerFieldUpdater,AtomicIntegerFieldUpdater本身是一个抽象类,提供了一个静态工厂方法来生成实例: public abstract class AtomicIntegerFieldUpdater<T> { /** * Creates and returns an u ...
Jdk1.6 JUC源码解析(2)-atomic-AtomicXXXArray 作者:大飞   功能简介: 数组原子量。   源码分析: 和原子量一样,数组原子量内部有一个Unsafe的静态引用。   private static final Unsafe unsafe = Unsafe.getUnsafe();         首先先看下AtomicIntegerArray。        AtomicIntegerArray的构造方法如下: /** * Creates a new A ...
Jdk1.6 JUC源码解析(1)-atomic-AtomicXXX 作者:大飞   功能简介: 原子量和普通变量相比,主要体现在读写的线程安全上。对原子量的是原子的(比如多线程下的共享变量i++就不是原子的),由CAS操作保证原子性。对原子量的读可以读到最新值,由volatile关键字来保证可见性。 原子量多用于数据统计(如接口调用次数)、一些序列生成(多线程环境下)以及一些同步数据结构中。 源码分析: 首先,原子量的一些较底层的操作都是来自sun.misc.Unsafe类,所以原子量内部有一个Unsafe的静态引用。 pri ...
        今天群友发了一个小编程题,使用递归的方式生成N位格雷码。         首先了解了一下格雷码及其递归思路,但写起来还是调试了很久。         代码如下: public static String[] createGrayCode(int n){ String[] codes = new String[2 << (n - 1)]; createGrayCode(codes, n); return codes; } private static void createGrayCode(String[] codes, int n ...
原题:         Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeating letters for "abcabcbb" is "abc". For "bbbbb" the longest substring is "b". 思路:         可以顺序遍历字符串,并将字符出现的位置记录 ...
原题:         请实现一个算法,确定一个字符串的所有字符是否全都不同。这里我们要求不允许使用额外的存储结构。 给定一个string iniString,请返回一个bool值,True代表所有字符全都不同,False代表存在相同的字符。保证字符串中的字符为ASCII字符。字符串的长度小于等于3000。 测试样例: "aeiou" 返回:True "BarackObama" 返回:False 思路:         首先想到如果可以有一个辅助的hash表,把遍历过的字符存储起来,这样会很容易判断。但题目要求不能使用额外存储结构,再一个,字符为ASCI ...
        今天群友出了一题:         一个数列,把第一个元素删除,然后把第二个元素放到数列的最后,依次操作下去,直到把数列中所有的数都删除,要求依次打印出这个过程中删除的数。         想一下这个过程类似于约瑟夫环,相当于把数组当成一个环,然后每隔一个数删掉一个数,直到把所有的数删完,当然这个过程中要打印出被删除的数。         /** * 思路:弄一个bit数组和目标数组一一对应,如果目标数据项被'删除', * 那么在对应的bit数组上做一下标记,下次数step的时候会跳过这些 * 别标记的bit。 * * @param a ...
        之前面试遇到过这样的问题:写一个方法,统计出一个int型数值中比特值为1的比特个数,后来群里也讨论过,在这里总结一下。         直观的看一下这个问题的解法。         假设一个int型数值为80。         首先,将这个数值转化成二进制形式。 80 = 00000000 00000000 00000000 01010000         然后数一数为1的bit有几个,很明显是2个,那么结果就是2。         但是写程序要怎么做呢?         首先看一个小技巧,x & (x-1)会把x中最右边为1的bit变成0,利用这个小技巧我们 ...
        今天有群友发了一个问题,要求不用加减符号(包括负号)来实现加减法。         分析一下,先看最简单的情况,假设1+1,按二进制算的话结果是10,可以看到从右往左的第一位变为0,第二位由于进位变为1。         第1位的值有4种,0+0=0、1+0=1、0+1=1、1+1=0,这正好符合“异或”的情况。         第2位的值来自于第一位的进位加上本身的值,进位的情况也有4种,0+0=0、1+0=0、0+1=0,1+1=1,这正好符合“与”的情况。         考虑一般性,a+b就等同于a^b + (a&b) << 1,而这又是一个加法,可递 ...
        今天看到群友发的一个问题:写一个小程序打印第n个斐波那契数。         自己试了下,搞了好久。。。基础要加强了。                 进入正题,什么是斐波那契数列就不说了,拿到这个题目,直接写出如下代码: public static long findFibonacci(int n){ if(n <= 2){ return 1; }else{ return findFibonacci(n - 1) + findFibonacci(n - 2); } }         运行一下,输入n分别为:1,2,3,4, ...
         Boolean类是Java中基本类型boolean的包装类。这个类比较简单,直接看源代码吧。 public final class Boolean implements java.io.Serializable, Comparable<Boolean>          可以看到有final修饰,说明这个类是不能被继承的,而且是可序列化和可比较的。          Boolean内部以一个boolean型的私有域来保存状态。 /** * The value of ...

Java基础-克隆

        Java中怎么拷贝一个对象呢?可以通过调用这个对象类型的构造器构造一个新对象,然后将要拷贝对象的属性设置到新对象里面。Java中也有另一种不通过构造器来拷贝对象的方式,这种方式称为克隆。         Java提 ...
        看这个类之前,先看一下Java的枚举——Enum。         枚举是啥?编码时我们经常需要写int型常量,在某些情况下(不是全部),用枚举更合适。举个例子,在程序中需要两个常量表示性别(男、女)。可能刚开始(JDK1.5之前)我们会这样写: /** * 男 */ public static final int MALE = 1; /** * 女 */ public static final int FEMALE = 0;         当然这么写也没什么错误,还算一目了然,用起来也还算方便。但仔细想一下这样会有什么问题! ...
        开发中有时会遇到这样的情况。要求某个调度器去调度一些任务,这些任务放在队列里。任务本身有优先级,调度器要按照优先级去调度队列里的任务,当然也会有新任务不断加入到队列中。         可以类比操作系统调度程序,操作系统要调度某个进程,简单的说会根据某种优先级进行调度(比如某些情况下,先执行时间较短的任务,保证短任务尽快结束。)         所以期望有这样一种数据结构,首先它是一个队列,可以从这个队列中不断取出优先级最高的(也可以认为是最大的或者最小的,因为本质是通过比较决定。)元素。也可以不断的将新元素添加到这个队列。         这种数据结构就叫做优先队列。优先队列的 ...
Global site tag (gtag.js) - Google Analytics