易截截图软件、单文件、免安装、纯绿色、仅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指定类型的文件目录及子目录搜索

package search;
import java.io.*;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* 读取目录及子目录下指定文件名的路径 并放到一个数组里面返回遍历
*
*
*/
public class FileViewer {
public static void search(String path, String[] Extention, boolean isdepth, ......

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; ......

java 基础知识点汇总

问题一:我声明了什么!
String s = "Hello world!";
许多人都做过这样的事情,但是,我们到底声明了什么?回答通常是:一个String,内容是“Hello world!”。这样模糊的回答通常是概念不清的根源。如果要准确的回答,一半的人大概会回答错误。

个语句声明的是一个指向对象的引用,名为“s ......

成为Java高手需要注意的25个学习目标

1.你需要精通面向对象分析与设计(OOA/OOD)、涉及模式(GOF,J2EEDP)以及综合模式。你应该了解UML,尤其是class,object,interaction以及statediagrams。
2.你需要学习Java语言的基础知识以及它的核心类库(collections,serialization,streams,networking,?multithreading,reflection,event,handling,NIO,localiza ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号