java ’ 目录归档

linux下批量清除maven target目录

find . -name pom.xml -execdir mvn clean \;
或者
find . -name pom.xml -exec mvn clean -f ‘{}’ \;

支持maven3

java生成不重复随机数

一个简单的java生成不重复随机数的算法

public class T {
  public static void main(String[] args) {
    // 种子你可以随意生成,但不能重复
    int[] seed = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    int[] ranArr = new int[9];
    Random ran = new Random();
    // 数量你可以自己定义。
    for (int i = 0; i < seed.length; i++) {
      // 得到一个位置
      int j = ran.nextInt(seed.length - i);
      // 得到那个位置的数值
      ranArr[i] = seed[j];
      // 将最后一个未用的数字放到这里
      seed[j] = seed[seed.length - 1 - i];
    }
    System.out.println("ranArr:" + Arrays.toString(ranArr));
  }
}

Hadoop on OSX “Unable to load realm info from SCDynamicStore”

在conf/hadoop-env.sh文件中加上

export HADOOP_OPTS=”-Djava.security.krb5.realm=OX.AC.UK -Djava.security.krb5.kdc=kdc0.ox.ac.uk:kdc1.ox.ac.uk”

JVM 默认参数

有时候你会需要了解JVM相关的参数,不管是出于好奇或者工作需要。Oracle的文档中列出了一些,(http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html),但这些并不是全部,而且有些参数的设置会默认启用或者关闭其他一些参数,而在某些情况下设置某个参数是不会生效的。还有些时候你想让JVM做某些事情,但是你不知道那个参数可以用。下面介绍一些办法用以列出所有参数,这样你在研究或者Google的时候也比较有明确的目标。

1、查看你使用的JDK支持的参数

java -XX:+UnlockDiagnosticVMOptions -XX:+PrintFlagsFinal -version

2、查看某个JVM参数是否生效

先使用jps查找到jvm的pid,然后使用jinfo


jinfo -flag UseParallelOldGC 881

-XX:UseParallelOldGC

减号表示关闭,加号表示开启

volatile 使用场景

什么是volatile变量

java语言提供了一种削弱的同步机制,即volatile变量,用来确保将变量的更新操作通知到其他线程。当把变量声明为volatile类型后,编译器与运行时都会注意到这个变量是共享的,因此不会将该变量上的操作与其他内存操作一起重排序。volatile变量不会被缓存在寄存器或者对其他处理器不可见的地方,因此在读取volatile类型的变量时总会返回最新写入的值。

另外,在旧的内存模型,volatile变量不能被重排序,但它们可能会受到非volatile变量重排序的影响。这破坏了volatile字段做为一个线程到另一个线程的信号条件的有效性。在新的内存模型中volatile变量一样不能被重排序,但将不会受到非volatile变量的影响。

 

为什么要使用volatile

volatile变量修饰符如果使用恰当的话,它比synchronized的使用和执行成本会更低,因为它不会引起线程上下文的切换和调度。

 

应用volatile变量的三个原则

(1)写入变量不依赖此变量的值,或者只有一个线程修改此变量

(2)变量的状态不需要与其它变量共同参与不变约束

(3)访问变量不需要加锁

 

例1


	volatile boolean shutdown;

	public void shutdown() {
		shutdown = true;
	}

	public void dowork() {
		while (!shutdown) {
			// do something
		}
	}

这是一个适用的场景。

 

例2


	public static int race = 0;

	public static void increase() {
		race++;
	}

	public static int getRace() {
		return race;
	}

这是一个不能用volatile关键字的例子

简单的说

加锁机制既可以确保可见性又可以确保原子性,而volatile变量只能确保可见性。

 

参考

Older Material (for the memory model historians among you)
http://www.cs.umd.edu/~pugh/java/memoryModel/index.html#older

What does volatile do?
http://www.cs.umd.edu/~pugh/java/memoryModel/jsr-133-faq.html#volatile

Java并发编程实战
http://book.douban.com/subject/10484692/

编译Hadoop eclipse plugin

Hadoop 版本 1.0.4

编辑${HADOOP_HOME}/src/contrib/build-contrib.xml

<project name="hadoopbuildcontrib" xmlns:ivy="antlib:org.apache.ivy.ant">
<property name="eclipse.home" location="/home/Develop/eclipse"/>
<property name="version" value="1.0.4"/>
<property name="name" value="${ant.project.name}"/>
<property name="root" value="${basedir}"/>
<property name="hadoop.root" location="${root}/../../../"/>
<!-- Load all the default properties, and any the user wants -->
<!-- to contribute (without having to type -D or edit this file -->

</project>

编辑%Hadoop_HOME%\src\contrib\eclipse-plugin\build.xml

 <path id="eclipse-sdk-jars">
 <fileset dir="${eclipse.home}/plugins/">
 <include name="org.eclipse.ui*.jar"/>
 <include name="org.eclipse.jdt*.jar"/>
 <include name="org.eclipse.core*.jar"/>
 <include name="org.eclipse.equinox*.jar"/>
 <include name="org.eclipse.debug*.jar"/>
 <include name="org.eclipse.osgi*.jar"/>
 <include name="org.eclipse.swt*.jar"/>
 <include name="org.eclipse.jface*.jar"/>

<include name="org.eclipse.team.cvs.ssh2*.jar"/>
 <include name="com.jcraft.jsch*.jar"/>
 </fileset>
 <fileset dir="../../../">
 <include name="hadoop*.jar"/>
 </fileset>
 </path>
<pre>

然后ant

如有提示找不到hadoop-core-1.0.4,commons-cli-1.2.jar,只需复制到对应目录即可

Java HelloWorld

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

return top