更多库之谜总结 (三)

2014-11-24 02:43:04 · 作者: · 浏览: 4
ing args[])throws Exception{
Dog dog = Dog.INSTANCE;
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("1.txt"));
out.writeObject(dog);
out.close();
ObjectInputStream in = new ObjectInputStream(new FileInputStream("1.txt"));
Dog dog2 = (Dog)in.readObject();
in.close();
System.out.println(dog==dog2);
}
}


8.Thread.interrupted()和Thread.isInterrupted()的 区别
Thread.interrupted()方法后会清除当前线程的中断状态。

Thread.isInterrupted()则只是测试是否已经被中断。

view plaincopy to clipboardprint public class PuzzleDemo84{
public static void main(String args[]){
Thread.currentThread().interrupt();
if(Thread.currentThread().isInterrupted

()){
System.out.println

("Interrupt:"+Thread.currentThread().isInterrupted());
}
else{
System.out.println(" Not

Interrupt:"+Thread.currentThread().isInterrupted());
}
}
}
public class PuzzleDemo84{
public static void main(String args[]){
Thread.currentThread().interrupt();
if(Thread.currentThread().isInterrupted

()){
System.out.println

("Interrupt:"+Thread.currentThread().isInterrupted());
}
else{
System.out.println(" Not

Interrupt:"+Thread.currentThread().isInterrupted());
}
}
}


9.多线程下的初始化
当一个线程访问一个类的某个成员之前,都会去检查这个类是否已经被初始化。

多线程下类初始化有4种情况:

(1)这个类没被初始化。

(2)这个类被当前线程初始化。

(3)这个类被其他线程初始化。

(4)这个类已经被初始化。

当第三种情况下,如果B线程要访问A类的某个成员,则发现正在被C线程初始化,则会等待C线程初始化完毕,才会继续运行。

结论:要明确初始化顺序。

view plaincopy to clipboardprint public class PuzzleDemo85{
private static boolean initialize = true; //1
private static Thread t = new Thread(new Runnable(){ //2
public void run(){
initialize = true;
}
});
static{
System.out.println(initialize);
t.start(); //3

}
public static void main(String args[]){
try{
System.out.println("main:"+initialize);
t.join(); //4
}
catch(Exception e){}
System.out.println(initialize); //5
}
}
public class PuzzleDemo85{
private static boolean initialize = true; //1
private static Thread t = new Thread(new Runnable(){ //2
public void run(){
initialize = true;
}
});
static{
System.out.println(initialize);
t.start(); //3

}
public static void main(String args[]){
try{
System.out.println("main:"+initialize);
t.join(); //4
}
catch(Exception e){}
System.out.println(initialize); //5
}
}

作者“xiazdong的专栏”