总结主要源于复习与参考往届试卷中发现的自己的易错点、不清楚的点。
可变性与不可变性:
对于弱不可变性:允许有R值的变化,但是A值不可变,在外部观察视角看应是不变的,具体点的判断方法:执行任何方法的结果都不变;
对于强不可变性:不允许任何变化,即使是R值也不可变
表示泄露:
当对某个ADT外部的其它变量的操作会导致ADT内部发生变化才能认为有表示泄露,有方法返回可变类型并不一定存在表示泄露,可以使用防御式拷贝来防止该种表示泄露
线程Interrupt:
对于一般情况下的线程,被请求interrupt后只会置相关联的一个boolean属性为true,不会有别的响应;对于正在sleep\wait\join中的线程,会抛出InterruptedException并复原boolean属性的值为false
最后一点对于我们的实际编程实际上有很大影响,在并发编程中,很难去控制线程间的执行顺序,即使使用了sleep方法希望在此之中响应interrupt,也有可能另一个线程对其的中断请求在其调用sleep前就已经发生,此时若后续没有对isInterrupted的检查就不会发现这一点,无法做出相应;同样,若对于isInterrupted的检查不放在一个循环中,那也有可能检查的时候还没有收到中断请求但是之后收到了,同样得不到处理。这种执行顺序的不可控性带来了很大阻碍,因此同步和锁的机制会更加安全好用一些,利用该机制可以保证一个线程的独享执行。