易截截图软件、单文件、免安装、纯绿色、仅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文件中获取该项目的相对路径

在JAVA文件中获取该项目的相对路径
1.基本概念的理解
  绝对路径:绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL和物理路径)例如:
C:\xyz\test.txt 代表了test.txt文件的绝对路径。http://www.sun.com/index.htm也代表了一个
URL绝对路径。
  相对路径:相对与某个基准目录的路径。包含Web的 ......

Java实现的3D计算机图形类库与引擎


3.1 跨平台三维图形开发工具包Java 3D
官方主页:https://java3d.dev.java.net/
Java 3D严格遵循“建模-绘制”泛型。场景图(scene graph)的 抽象模型被用来组织和维护虚拟场景中的可是对象及其行为。场景图包含了虚拟图形世界的全部信息,Java 3D绘 制引擎会对场景图进行自动绘制。
Java 3D is a scene g ......

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利用Socket网络传递文件

服务器端:
package com.huahua;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerThread extends Thread {
......

JAVA中的运算符


1

+=
:sum += 1;
相当于
sum = sum + 1;

2

++ --
:i++ i

1, i-- i

1, ++


放在数值后,表示执行运算后加(减)
1
,反正数值前表示执行运算前加(减)
1

3


: :
int n = a<10?1:2
表示如果
a
小于
10

n
等于
1
否则等于
2

4
......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号