2018版Java多线程面试题集合及答案攻略
介绍
在Java开发中,多线程是一个非常重要的概念。掌握多线程的知识对于面试来说是必不可少的。本攻略将详细讲解2018版Java多线程面试题集合及答案,帮助你更好地准备面试。
问题1:什么是线程?Java中如何创建线程?
答案:
线程是程序执行的一条路径,是进程中的一个执行单元。在Java中,有两种方式创建线程:
- 继承Thread类:创建一个继承自Thread类的子类,并重写run()方法。然后通过创建子类的实例来创建线程对象,并调用start()方法启动线程。
示例代码:
class MyThread extends Thread {
public void run() {
// 线程执行的代码
}
}
public class Main {
public static void main(String[] args) {
MyThread thread = new MyThread();
thread.start();
}
}
- 实现Runnable接口:创建一个实现了Runnable接口的类,并实现run()方法。然后通过创建该类的实例,再创建Thread对象,并将实现了Runnable接口的类的实例作为参数传递给Thread的构造函数。最后调用start()方法启动线程。
示例代码:
class MyRunnable implements Runnable {
public void run() {
// 线程执行的代码
}
}
public class Main {
public static void main(String[] args) {
MyRunnable runnable = new MyRunnable();
Thread thread = new Thread(runnable);
thread.start();
}
}
问题2:线程的生命周期有哪些状态?
答案:
线程的生命周期包括以下几个状态:
- 新建状态(New):当线程对象被创建时,线程处于新建状态。
- 就绪状态(Runnable):当调用线程的start()方法后,线程进入就绪状态,表示线程已经准备好,等待CPU的调度执行。
- 运行状态(Running):当线程获得CPU资源后,进入运行状态,执行run()方法中的代码。
- 阻塞状态(Blocked):当线程因为某些原因无法继续执行时,进入阻塞状态。例如,线程调用了sleep()方法、等待I/O操作完成等。
- 等待状态(Waiting):当线程调用了wait()方法后,进入等待状态,等待其他线程的通知。
- 超时等待状态(Timed Waiting):当线程调用了带有超时参数的sleep()方法、wait()方法或join()方法后,进入超时等待状态。
- 终止状态(Terminated):当线程的run()方法执行完毕或者调用了stop()方法后,线程进入终止状态。
示例说明
假设我们有一个需求:创建两个线程,一个线程打印奇数,另一个线程打印偶数。我们可以使用Java多线程来实现这个需求。
示例代码:
class PrintOdd implements Runnable {
public void run() {
for (int i = 1; i <= 10; i += 2) {
System.out.println(\"奇数:\" + i);
}
}
}
class PrintEven implements Runnable {
public void run() {
for (int i = 2; i <= 10; i += 2) {
System.out.println(\"偶数:\" + i);
}
}
}
public class Main {
public static void main(String[] args) {
Thread oddThread = new Thread(new PrintOdd());
Thread evenThread = new Thread(new PrintEven());
oddThread.start();
evenThread.start();
}
}
在上述示例中,我们创建了两个实现了Runnable接口的类PrintOdd和PrintEven,分别用于打印奇数和偶数。然后创建了两个线程对象,分别传入对应的Runnable实例。最后调用start()方法启动线程,实现了奇数和偶数的交替打印。
以上是对2018版Java多线程面试题集合及答案的详细讲解攻略。希望能帮助你更好地理解和掌握多线程的知识,为面试做好准备。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:2018版java多线程面试题集合及答案 - Python技术站