第一个问题解答:
平优先级的线程,执行顺序是随机的,有JVM管理,没有一定的顺序。所以,你上面的 c1.join();c2.join();c3.join();
执行顺序是不一定的。虽然优先级高的线程执行的机率高,但是不代表优先级高就可以先执行,这样看谁先取得cpu的资源!
第二个问题解答:
SuperClass m=new ChildClass();
CollectionSuperClass<Father> c= new CollectionSuperClass<Child>();
多态你应该理解了,这里就不解释,这里涉及到泛型安全问题。假设有三个类,父类是Perons,它里面有一个
public void person(Person<>)
Student和worker都继承这个Person类,如果
CollectionSuperClass<Father> c= new CollectionSuperClass<Child>()在JAVA机制里面允许的话,它就会出现泛型安全问题。
可以用反证法跟你说吧!就拿你这个例子说明吧,假设它还有一个子类Son,父类型泛型的应用可以执行子类型泛型的对象,
可以生产C这个对象,当你调用这个public void test(ColectionSuperClass<Father> c){}方法时(假设它存在),假设你向这个方法中
传递这个参数CollectionSuperClass<Father> c= new CollectionSuperClass<Child>()对象C,它也有一个fahter.add(new Son())方法(假设它存在)
,Son是Fahter的子类,fahter可以调用add(new Son()),但是你传进来的这个C虽然是Father类型的,但是他是Child类型的对象,
你向一个Son类型对象的方法传递了其他对象,这在java里面是不允许的。虽然拥有共同父类,但是这两个子类跟本没有什么直接联系,它们之有和它们共同的父类有联系
这回你可以想通了吧! |