首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Eclipse开发 >

两个有关问题:一个线程,一个集合类

2013-02-25 
两个问题:一个线程,一个集合类1.c1.start()c2.start()c3.start()c1.join()c2.join()c3.join()三个线

两个问题:一个线程,一个集合类
1.  c1.start();c2.start();c3.start();
  
   c1.join();c2.join();c3.join();
   三个线程,同时调用join方法,那是不是c1先运行完然后再运行c2,然后再运行c3??还是JVM有选择权,从三个中选一个。。。



2. SuperClass m=new ChildClass();
   CollectionSuperClass<Father> c=new  CollectionSuperClass<Child>();
   假设存在这四个类,然后分别new出来m和c这两个对象,第一个不会报错,因为是父类引用指向子类对象,但是第二个就会报错,需要类型转换,我      不懂为什么第二个需要转换。。。这两个有什么区别??


求牛人。。。。
[解决办法]
第一个 问题就是当执行 c1.join()时,主线程就等待这个c1线程执行,下面的语句暂时执行不了。但 c2和c3都已经启动,所以 后台运行不受影响。所以这时的情况是: 主线程不执行,c1,c2,c3在执行。
当c1线程执行完后,主线程继续执行c2.join()(如果这时c2结束了,就继续执行c3.join())。主线程继续等待c2结束,但此时c2,c3还在运行。
[解决办法]

引用:
引用:第一个 问题就是当执行 c1.join()时,主线程就等待这个c1线程执行,下面的语句暂时执行不了。但 c2和c3都已经启动,所以 后台运行不受影响。所以这时的情况是: 主线程不执行,c1,c2,c3在执行。
当c1线程执行完后,主线程继续执行c2.join()(如果这时c2结束了,就继续执行c3.join())。主线程继续等待c……


没选择的权力。  
c1.start();c2.start();c3.start();
c1.join();c2.join();c3.join(); 都是在主线程中。 所以是按照先后顺序来的。
但是对于c1、c2、c3 中的run方法,哪个先执行,那就是不确定的了。就算你在控制台看到 c2 是最先输出的,c1.start(); 这行代码也是先执行的。



第二个问题。
如果用泛型的话,两边的类型要一样,如果你想父类引用子类,可以换种写法。
 CollectionSuperClass<? extends Father> c=new  CollectionSuperClass<Child>();
这样就不会报错了。
[解决办法]
引用:
引用:引用:第一个 问题就是当执行 c1.join()时,主线程就等待这个c1线程执行,下面的语句暂时执行不了。但 c2和c3都已经启动,所以 后台运行不受影响。所以这时的情况是: 主线程不执行,c1,c2,c3在执行。
当c1线程执行完后,主线程继续执行c2.join()(如果这时c2结束了,……

泛型原来可以这样写。。。。
[解决办法]
引用:
引用:引用:第一个 问题就是当执行 c1.join()时,主线程就等待这个c1线程执行,下面的语句暂时执行不了。但 c2和c3都已经启动,所以 后台运行不受影响。所以这时的情况是: 主线程不执行,c1,c2,c3在执行。
当c1线程执行完后,主线程继续执行c2.join()(如果这时c2结束了,……

热点排行