Java面试题解析:线程创建、代码执行与同步

需积分: 9 0 下载量 97 浏览量 更新于2024-07-09 收藏 80KB PPT 举报
"Java面试整理(五).ppt" 这篇资料主要涵盖了Java编程语言中的核心概念,特别是关于面向对象编程(OOP)和多线程的面试知识点。以下是详细的解析: 1. **创建线程的两种方式及区别** 创建Java线程主要有两种方式:继承`Thread`类和实现`Runnable`接口。 - 继承`Thread`类:这种方式直接扩展了`Thread`类,可以重写`run()`方法,调用`start()`来启动线程。优点是调用简单,但缺点是类不能同时继承其他类,因为Java不支持多重继承。 - 实现`Runnable`接口:需要将实现类的对象传递给`Thread`类的构造器,然后通过`Thread`对象的`start()`方法启动。这种方式保留了类的继承性,更灵活,是实际开发中更常见的选择。 2. **代码输出分析** 在提供的代码段中,`SwingPanel`类有一个成员变量`text`和构造函数中定义的局部变量`text`。在构造函数中,传入的`inputText`赋值给了局部变量而非成员变量,因此`getText()`返回的是成员变量的初始值,即"World!",而不是构造函数中传入的"Hello!"。 3. **启动线程的方法** 启动线程应使用`Thread.start()`方法,而不是直接调用`run()`。调用`start()`会调度执行`run()`中的代码,并且确保线程的并发执行。直接调用`run()`只会将其作为普通方法执行,不会产生多线程的效果。 4. **多线程同步问题** 在`Bank`类中,`withdraw`和`deposit`方法都声明为`synchronized`,这意味着它们是线程安全的。当一个线程正在执行`withdraw`或`deposit`时,其他线程会被阻塞,直到该方法执行完毕。因此,不可能出现一个客户线程在`withdraw`中执行操作,而另一个客户线程在同一时刻在`deposit`中执行操作的情况。这是因为`synchronized`关键字提供了互斥访问,确保了同一时间只有一个线程能执行这些方法。 这些面试问题展示了Java OOP和多线程基础的重要性,包括类继承、接口实现、线程的启动与同步。对于Java开发者来说,理解和掌握这些基础知识至关重要,特别是在进行系统设计和优化时。
2006-02-23 上传