Java基础面试题解析与答案

需积分: 10 2 下载量 161 浏览量 更新于2024-09-05 收藏 32KB DOCX 举报
"这是一份Java基础面试题的文档,包含单选题和一道大题,其中涵盖了类、对象、同步机制等核心知识点。" 在Java编程中,面试题经常涉及基本概念和语言特性,本题目主要测试的是对类、对象的创建与比较以及线程同步的理解。 首先,我们来看第一道选择题。代码创建了两个`GaoYang`类的实例`gy1`和`gy2`,然后调用`equals()`方法比较它们是否相等。在Java中,`equals()`方法默认比较的是对象的引用,而非内容。由于`gy1`和`gy2`是两个不同的对象,它们的引用不同,所以`gy1.equals(gy2)`返回`false`。因此,正确答案是B) false。 接下来,我们分析第二道题。这是一个关于线程同步的例子,涉及到`synchronized`关键字。`GaoYangTest`类实现了`Runnable`接口,并定义了两个同步方法`m1()`和`m2()`。`m1()`方法中修改了变量`b`的值并休眠,`m2()`方法则在休眠后再次修改`b`的值。在`main`方法中,创建了一个`GaoYangTest`实例`gy`和一个新线程,线程执行`m1()`,主线程执行`m2()`。 由于`m1()`和`m2()`都是同步方法,同一时刻只有一个线程能执行。这里的情况是线程先执行`m1()`,在打印`b=1000`之前休眠500毫秒,然后主线程执行`m2()`,将`b`设为2000,打印`mainthreadb=2000`。但线程在休眠结束后会继续执行,可能在主线程打印之后或者之前打印`b=1000`。 因此,程序可能的输出结果是: - A)mainthreadb=2000 b=1000:线程在主线程打印之后打印`b=1000` - D)mainthreadb=1000 b=2000:线程在主线程打印之前打印`b=1000` 答案B) 和C) 是不正确的,因为不可能同时打印`b=2000`两次,且`b`的值不可能同时是1000和2000。 总结这些题目,我们可以得出以下Java相关的知识点: 1. 对象的创建与比较:Java中的`equals()`方法默认比较的是对象引用,而不是内容。如果需要比较对象的内容,通常需要重写`equals()`方法。 2. 类与对象:`new`关键字用于创建类的实例,每个实例都有自己独立的内存空间。 3. 线程同步:`synchronized`关键字用于控制多线程访问共享资源,防止数据的不一致性。当一个线程进入同步方法或代码块后,其他线程必须等待该线程执行完毕才能进入。 4. `Thread.sleep()`方法:用于让当前线程暂停执行指定的毫秒数,释放CPU执行权,但不会释放锁。 5. 线程的生命周期:线程可能会在某个同步块的执行过程中被中断,然后在合适的时候恢复执行。 这些知识点是Java程序员必备的基础,理解并能灵活运用它们对于解决并发问题和编写高效稳定的代码至关重要。