易截截图软件、单文件、免安装、纯绿色、仅160KB

java中synchronized关键字的测试

  最近由于各种原因迫使自己需要详细了解java的基本知识,之前在学校学java多线程的时候,很多很重要的知识点都是一带而过。
  我们来回忆一下java中synchronized关键字的用途(一下内容属个人理解,欢迎读者修正!):
  1:synchronized 修饰静态方法时候,在任何时候jvm都保证只有一个线程访问方法内部的代码,因此保证了许多静态的对象不被意外的修改,解决了多线程下静态对象的数据不同步问题。
  看以下测试代码:
package thread;
public class TestSynchronized extends Thread {
/**
* 测试输出的次数
*/
private static int times;
/**
* 定义三个线程
*/
private static Thread t1 = new TestSynchronized("t1");
private static Thread t2 = new TestSynchronized("t2");
private static Thread t3 = new TestSynchronized("t3");

/**
* 开始测试时间
*/
private static long start;
TestSynchronized(String name){
super(name);
}
/**
* @param args
*/
public static void main(String[] args) {
start = System.currentTimeMillis();
t1.start();
t2.start();
t3.start();
}
public void run(){

for(int i=0;i<50;i++){
log(getName(),i);
}
//打印最长话费时间 以最后打印的为标准
System.out.println(getName()+"已经结束。花费时间:"+(System.currentTimeMillis()-start));
}
synchronized static void log(Object id,Object msg){
times++;
msg(id," 进来了。。");
msg(id,msg);
try {
Thread.sleep(100);
} catch (Exception e) {e.printStackTrace();}
msg(id," 出来了。。");
}
static void msg(Object id,Object msg){
System.out.println(times+":"+id+">>"+msg);
}



}

其中我们一“times” 为要我们要同步的数据,每次log的时候times将被自加一次,在只有一个线程访问该方法的情况下可以很正常的打印出times对应的输出。但是在多线程的环境下就会很容易出现错位的现象,以上代码的部分输出(三个线程)如下:
第3次log,线程:t2>>log start。。
第3次log,线程:t2>>0
第3次log,线程:t1>>log start。。
第3次log,线程:t1>>0
第3次log,线程:t3>&


相关文档:

java 利用XSD 验证XML文件

XSD文件 (XML Schema 语言也称作 XML Schema 定义(XML Schema Definition,XSD)。 具体使用方法和定义请参看:
http://www.w3school.com.cn/schema/index.asp
java自jdk1.5以上新增了SchemaFactory类 可以实现对XSD验证的支持,使用起来也很方便。
以下代码可用在JDK1.5+ 验证xml
public class SimpleErrorHandler i ......

java静态内部类(嵌套类)

 如果你不需要内部类对象与其外围类对象之间有联系,那你可以将内部类声明为static。这通常称为嵌套类(nested class)。想要理解static应用于内部类时的含义,你就必须记住,普通的内部类对象隐含地保存了一个引用,指向创建它的外围类对象。然而,当内部类是static的时,就不是这样了。嵌套类意味着: 
1. 要 ......

Java 多线程与并发编程总结

认识多任务、多进程、单线程、多线程
  要认识多线程就要从操作系统的原理说起。
  以前古老的DOS操作系统(V 6.22)是单任务的,还没有线程的概念,系统在每次只能做一件事情。比如你在copy东西的时候不能rename文件名。为了提高系统的利用效率,采用批处理来批量执行任务。
  现在的操作系统都是多任务操作系统, ......

开发环境中实现Lombok消除Java冗余

Lombok是一种JavaArchive(JAR)文件,可用来消除Java代码的冗长。通过在开发环境中实现Lombok,开发人员可以节省构建诸如hashCode()和equals()这样的方法以及以往用来分类各种accessor和mutator的大量时间。
我们看这样一个例子,一个标准的Javabean。一个典型的Javabean一般具有几个属性。每个属性具有一个accessor和mutat ......

Java插入Oracle Spatial空间数据

Java读取地理信息数据文件,并将其存入Oracle数据库。
package file;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号