错题集05_错题集

总结:

综上:新生代基本采用复制算法,老年代采用标记整理算法。cms采用标记清理。

错题集05_牛客网_02

总结:

在每个线程中都是顺序执行的,所以sl.printAll();必须在前三句执行之后执行,也就是输出的内容必有(连续或非连续的)ABC。

而线程之间是穿插执行的,所以一个线程执行 sl.printAll();之前可能有另一个线程执行了前三句的前几句。

E答案相当于线程1顺序执行完然后线程2顺序执行完。

G答案则是线程1执行完前三句add之后线程2插一脚执行了一句add然后线程1再执行 sl.printAll();输出ABCA。接着线程2顺序执行完输出ABCABC

输出加起来即为ABCAABCABC。

错题集05_牛客网_03

总结:


A,Java 并发库 的Semaphore 可以很轻松完成信号量控制,Semaphore可以控制某个资源可被同时访问的个数,通过 acquire() 获取一个许可,如果没有就等待,而 release() 释放一个许可。
B,CyclicBarrier 主要的方法就是一个:await()。await() 方法没被调用一次,计数便会减少1,并阻塞住当前线程。当计数减至0时,阻塞解除,所有在此 CyclicBarrier 上面阻塞的线程开始运行。
C,直译过来就是倒计数(CountDown)门闩(Latch)。倒计数不用说,门闩的意思顾名思义就是阻止前进。在这里就是指 CountDownLatch.await() 方法在倒计数为0之前会阻塞当前线程。
D,Counter不是并发编程的同步器

错题集05_牛客网_04


错题集05_错题集_05

总结:

java中如果碰到char、byte和short参与运算时,会自动将这些值转换为int类型然后再进行运算。

这里a1和a2就自动转为int类型了,结果也为Int类型。把一个int类型赋值给byte需要转型。

错题集05_牛客网_06

总结:

多态绑定机制:

  1. 实例方法与引用变量所引用的对象的方法绑定;

  2. 静态方法与引用变量所声明的类型的方法绑定;

  3. 成员变量(实例变量、静态变量)与引用变量所声明的类型的成员变量绑定。

在这道题目中,由于都是实例方法,所以与所引用的对象的方法绑定。(new 后跟引用对象)


对于多态,可以总结它为:       

     一、使用父类类型的引用指向子类的对象;

    二、该引用只能调用父类中定义的方法和变量;

    三、如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法;(动态连接、动态调用)

    四、变量不能被重写(覆盖),”重写“的概念只针对方法,如果在子类中”重写“了父类中的变量,那么在编译时会报错。

多态的3个必要条件:

        1.继承   2.重写   3.父类引用指向子类对象。

错题集05_错题集_07

总结:

首先final声明的方法是不能被覆盖的,但是这里并不错误,因为方法是private的,

也就是子类没有继承父类的run方法,因此子类的run方法跟父类的run方法无关,

并不是覆盖。new Car().run()也是调用子类的run方法。