`
文章列表
将博客搬至CSDN
上一篇文章说的是,避免多个线程在同一时间访问对象中的同一数据,这篇文章来详细说说共享和发布对象。 在没有同步的情况下,我们无法预料编译器、处理器安排操作执行的顺序,经常会发生以为“一定会”发生的动作实际上没有发生。可以用一些简单的方法来避免这个问题。   在 Java 中,如果不是64位版本的,JVM 会把 double 或者 long 的读和写划分在两个 32 位中,这样一来,在多线程中,没有声明是 volatile 的 double 或者 long 也是不安全的。   锁是同步和互斥的,同样也是内存可见的。为了避免出现读到过期的数据,读和写的线程都要使用公共的锁进行同步。   ...
写线程安全的代码,说白了就是管理一个类的共享的、可变的状态。只要有多于 1 个线程对类的状态进行写入,那么就必须用同步来协调这多个线程对状态的访问。对于一个没有状态的类来说(简单的理解就是只有方法没有成员变量,不储存值),它永远都是安全的。而对于有状态的类来说,就要保持其原子性来保证安全。   在多线程环境下,一种可能的风险就是 check-then-act (竞争条件的一种),就是 check 的时候条件满足,然后系统状态被别的线程改变了,这时候当前线程不知道 then act, 然后错了。比如用 lazy initialization 就可能出现这种状况,为了避免这种情况,可以把成员 ...
问题描述:eclipse 中 Tomcat DEBUG 模式启动慢,而运行模式正常 解决方法:看看是不是设了很多断点,如果是,去掉全部断点再试试 DEBUG 模式;如果不是,请继续 google.
Unicode 的发展,英文好的直接去 unicode.org 上去看吧,不好的可以移步到这里 看dengyunze的总结:《关于UTF8,UTF16,UTF32,UTF16-LE,UTF16-BE 》 。此文讲的清除明白:为了能把世界上的所有字符都表示,理论上需要用 UTF-16,但是由于“大部分”(当然这是欧美那边技术宅男拍脑袋想出来的大部分啦~)的字符只需要 1 个字节就搞定了,用 UTF16 实在太浪费啦,于是他们就用了 UTF8. 对于那些个“少数”(比如中日韩)的字符,就通过一个 UTF8-UTF16 的转换来表示。 UTF8 和 UTF16 都是变长表示的,为啥欧美技术宅会觉 ...
代码来源于 https://svn.apache.org/repos/asf/harmony/enhanced/classlib/archive/java6/modules/luni/src/main/java/java/lang/Integer.java   public static int parseInt(char[] chars) { return parseInt(chars, 0, chars.length); } public static int parseInt(char[] chars, int offset, int length) { ret ...
package BitCount; /** * 任意给定一个32位无符号整数n,求n的二进制表示中1的个数,比如n = 5(0101)时,返回2,n = 15(1111)时,返回4 * * @author vivizhyy * */ public interface BitCountMethods { /** 移位+计数 */ public int normal(int x); /** 不断清除x的二进制表示中最右边的1,同时累加计数器,直至x为0 */ public int quick(int x); /** * @see ...
今天读 Lucene 源码,有这样一个函数: /** Returns the number of bits set in the long */ public static int pop(long x) { /* * Hacker's Delight 32 bit pop function: * http://www.hackersdelight.org/HDcode/newCode/pop_arrayHS.cc * * int pop(unsigned x) { x = x - ((x >> 1) & 0x55555555); ...

文档过滤

    博客分类:
  • java
算法来自于《集体智慧编程》-第六章 原书代码用 Python 实现,这两天看这章书,改用 Java 实现。   package ch6DocumentFiltering; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.Set; public class Classifier { private HashMap<String, Integer[]> fc = new HashMap<String ...
说明:算法来自于《集体智慧编程》-第五章 原书代码用 Python 实现,这两天看这章书,改用 Java 实现。 问题描述:Glass 一家六人在全国各地c,要到 LGA 碰头聚会。求花费最少的解法。 和原书代码意思不同的:计算增加了旅途中时间,0.5/h /** * * FILENAME: Optimization.java * AUTHOR: vivizhyy[at]gmail.com * STUID: whu * DATE: 2010-4-12 * USAGE : */ package ch5.optimization; imp ...
其他的比较简单,但是当一个对象,e.g. someOne,可能匹配多个类类型而匹配后的操作又相同时,可以这样写: someOne match{ case abc @ (_:A | _:B | _:C) => //do sth case _ => //do sth default } 或者这样: someOne match{ case _:A | _:B | _:C => //do sth case _ => //do sth default }
Scala 中没有 break(2.8 中将会支持) 和 continue,的确是件纠结的事情啊~ 更纠结的是,return 似乎也不能直接 work 比如 Java 里头可以这样写(虽然这样写并不好): for(int i = 0; i < 10; i++){ System.out.println("i = " + i); if(i == 1){ System.out.println("return at i = 1"); ret ...
引用自娱自乐的东西,欢迎拍砖 traits 是Scala中能够被重用的一种基本单元。 trait 中封装了方法和字段定义,这样就可以将他们混合成类。和类的继承不同的是,类必须是单继承的,但是一个类中可以混有多个 trait. 这一章就是 ...
一个 Twitter 的开发人员说过,Scala 将会成为现代 Web2.0 的发起语言。LinkedIn (一个当下流行的面向白领的 SNS 网站, http://www.linkedin.com )也用这种语言。同样许多其他大的公司如 Sony Picture, EDF, SAP 也开始使用这种语言。 Scala 名字的含义 Scala 意为可扩展的(scalable)语言,意味着开始时很小但是可以长久发展。对于新接触 Scala 的人来说,它看起来也许像脚本语言。但是 Scala 并不是真正的脚本语言,这也不是 Scala 主要的特性。实际上,它能够做到 Java 能做到的一切事情并且能提 ...
我更倾向于像理解对象那样来理解 scala 的函数,因为 Scala 函数里面有一个叫做“函数文本” 的概念(这个概念在 ActionScript 中也有,在 AS 中,函数文本是指 未命名的函数)。在 Scala 中,函数文本被编译成一个类,类在运行期实例化的时候是一个函数值(function value)。所以,在源代码里面的那个叫“函数文本”,运行期对象里面的那个叫 函数值。很像“类”…… Scala 语言中的占位符 “_”, 太可爱了,太可爱了。对于那些简单的一看函数名就知道用来干嘛的计算就不用伤神去想起个什么变量名字了。但是这种特性不能广泛的应用,因为这个 cute 的 _ 用过了将会 ...
Global site tag (gtag.js) - Google Analytics