Tag Archives: Java && J2EE

Java格式化日期字符串String

不用SimpleDateFormat就能格式化的,之前3年一直都太土太土太土了……

%1$tx,其中1表示第一个参数需要是Date,t是表示转入日期控制,x表示一般的ymd哪些什么的日期控制。
//格式化
String tmstr = String.format("%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS" , new Date());

//输出 2011-12-09 17:14:57
System.out.println(tmstr);[......]

继续阅读

Java Concurrency in Practice 读书笔记 第七章

7.1  任务的取消
任务应该是可取消的:在run的外界可以让其状态从运行变为终止。

需要取消任务的场景:

1、用户取消任务,如点击了“取消”

2、时间timeout限制的任务

3、程序外部事件需要处理。

4、出错

5、关闭、退出、清理

Java中没有原生提供“停止线程”的方法,但可以使用“bool标志位+volatile”的方式来实现,注意list还是需要被锁保护的。
@ThreadSafe
public class PrimeGenerator[......]

继续阅读

Java Concurrency in Practice 读书笔记 第五章

5.1  同步的Collections
JDK中,同步的Collections包含Vector和Hashtable,以及从1.2之后加入的Collections.synchronizedXXX 工厂构造函数生成的类。

这些类都内置了同步措施,确保任何时间只有一个线程能访问public方法。

然而这有一些例外:下标迭代、iteration迭代、foreach、next()、pre()等都是“快速失效的”,即有可能在你调用的过程中其他线程执行了修改,导致抛出异常。

因此,下面只是[......]

继续阅读

Java Concurrency in Practice 读书笔记 第四章

第四章  组成(线程安全的)对象
4.1  设计线程安全的类
设计一个线程安全的类包含如下准则:

1、识别出哪些变量将改变类的状态

2、识别出约束状态变量的不变条件

3、建立起规则,用于管理并发访问状态的状态

如果一个对象的field都是由基本数据类型(int long等)组成的,则所有这些field就构成了对象的全部状态。

如果对象的field中还包含引用,则对象状态还要包括这些引用变量中的隐含数据。例如LinkedList中的Node。

为了方便后人阅[......]

继续阅读

Java Concurrency in Practice 读书笔记 第三章

第三章  共享对象
在有的业务场景,不仅需要线程安全读写对象,还要让其他线程得知对象状态的更改,这必须由线程同步机制来完成。
3.1  可见性
当某个变量改变时,如果不运用线程同步机制,将无法确保另外的读线程能马上看到修改的结果。

例如下面的代码:
public class NoVisibility {
private static boolean ready;
private static int number;

private static c[......]

继续阅读