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

Java时区bug,TimeZone.setDefault()只在当前线程有效

   项目是基于GMT时间的,在系统启动的时候,我们就会调用TimeZone.setDefault(timeZone)将默认时区设为GMT。
   后来突然发现,有时用户选择的时间经过后台一圈后回产生8个小时误差。又是间歇性的,要他重现的时候又偏不来。苦心debug,终于发现在部分线程中,时区还是GMT+8,后台某个调用可能把时区变为了GMT,8小时误差就产生了。网上一搜,原来是bug:
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6352812
只在部分电脑上有问题,幸好production上是好的,写了一个程序来测试:
import java.util.Date;
import java.util.TimeZone;
public class Test {
  @SuppressWarnings("unused")
  public static void main(String[] args) throws InterruptedException {
    DateThread thread = new DateThread();
    thread.start();
    TimeZone gmt = TimeZone.getTimeZone("GMT");
   
    Date now = new Date();
    System.out.println("main thread,before set timezone:" + now.toString());
    TimeZone.setDefault(gmt);
    Thread.currentThread().sleep(2000);
    thread.resume();
    System.out.println("main thread,after set timezone:" + now.toString());
   
  }
}
class DateThread extends Thread {
  @SuppressWarnings( { "unused", "deprecation" })
  public void run() {
    Date now = new Date();
    System.out.println("sub thread,before set timezone:" + now.toString());
    this.suspend();
    System.out.println("sub thread,after set timezone:" + now.toString());
  }
}
如果子线程输出的时区一样,就说明有bug


相关文档:

java ftp上传和下载

首先,建3个接口
FTPOperate.java:
public interface FTPOperate
{
public void execute(FTPBean entity);
}

FTPProxy.java:
public interface FTPProxy
{
public void connection();
public abstract void upload();

public abstract void download();
public void setEntity(FTPBe ......

Java安全编程笔记【1】 基本工具简介。


1.1 J2SE
的主要工具
基本工具:
javac
  
Java
编程语言的编译器。本书各章的程序都是在
DOS
窗口中通过执行
"javac
文件名

来编译
Java
程序的。文件名必须以
.java
为后缀,编译以后生成
.class
为后缀的字节码文件。
java
用于执行
Java
应用程序。本书各章的程 ......

关于java的hashCode方法

Java中的集合(Collection)有两类,一类是List,再有一类是Set。你知道它们的区别吗?前者集合内的元素是有序的,元素可以重复;后
者元素无序,但元素不可重复。那么这里就有一个比较严重的问题了:要想保证元素不重复,可两个元素是否重复应该依据什么来判断呢?这就是
Object.equals方法了。但是,如果每增加一个元素 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号