Java 并发面试题(一)

  在我招聘和找工作的过程中,java 并发是非常重要的考察内容。

  这篇文章中的面试题目来自并发编程,非常好的学习网站,题目来源 http://ifeve.com/javaconcurrency-interview-questions-base/

  a. 多线程基础

  0. java中有几种方法可以实现一个线程?

  在我招聘的过程中,大部分面试者都只能回答继承  Thread 类,这个回答是不能让面试官满意的。由于 java 的单继承特性,如果继承 Thread 类之后,自身创建的线程类就失去了灵活性,因此更好的方法是实现 Runnable 接口,实际上 Thread 类也是实现了 Runnable 接口。

  那么如何启动线程呢?先看 Thread 类

 1 public class MyThread extends Thread {
 2 
 3     @Override
 4     public void run() {
 5         System.out.println(currentThread().getId() + " ----> running");
 6     }
 7 
 8     public static void main(String[] args) {
 9         Thread th1 = new MyThread();
10         Thread th2 = new MyThread();
11         th1.start();
12         th2.start();
13     }
14 }

  运行结果:

9 ----> running
10 ----> running

  从这个简单的例子可以看出,Thread 类启动线程是通过调用 start() 方法实现的,而 Runnable 接口只提供了 run() 方法。所以第二个问题来了

  1. start() 方法和 run() 有什么区别?

  从 JDK 7 文档中可以看到 start() 方法创建了一个新的线程并调用了 run() 方法,如果直接在代码中调用 run() 方法,那么实际上是在当前线程执行而没有创建新的线程。

  那么如何启动实现 Runnable 接口的线程呢?可以对上面的例子进行修改,Thread 类的构造方法可以允许传入一个 Runnable 对象,利用这一点

posted @ 2014-11-13 13:30  uncleli1988  阅读(437)  评论(0)    收藏  举报