微信

使用微信服务,更方便

职友集>Java面试题 > 如下代码实现线程启动有什么问题?

如下代码实现线程启动有什么问题?

2015-06-22 06:30:01 阅读( 153 )

2476人 收藏本页

标签:Java面试题

public class A{   public A(){      this.x=1;      this.y=2;      this.thread=new MyThread();      this.thread.start();   }}如果有个类B继承了类A,依据java类初始化的顺序,A的构造函数一定会在B的构造函数调用前被调用,那么thread线程也将在B被完全初始化之前启动,当thread运行时使用到了类A中的某些变量,那么就可能使用的不是你预期中的值,因为在B的构造函数中你可能赋给这些变量新的值。也就是说此时将有两个线程在使用这些变量,而这些变量却没有同步。

解决这个问题有两个办法:将A设置为final,不可继承;或者提供单独的start方法用来启动线程,而不是放在构造函数中。


来自IT公司面试手册

下一篇:JAVA编程题

上一篇:Java工程师笔试题

亲~ 如果您有更好的答案 可在评论区发表您独到的见解。

您想查看更多的信息: 面试题