一,继承 Thread 类:但 Thread 本质上也是实现了 Runnable 接口的一个实例,启动线程的唯一方法就是通过 Thread 类的 start()实例方法。start()方法是一个 native 方法,它将启动一个新线程,并执行 run()方法。
二,实现 Runnable 接口的,并且实例化 Thread,传入自己的 Thread 实例,调用 run( )方法。
三,使用 ExecutorService、Callable、Future 实现有返回结果的多线程:ExecutorService、Callable、Future这 个 对 象 实 际 上 都 是 属 于 Executor 框 架 中 的 功 能 类 。 可返回值的必须实现 Callable 接口,无返回值的必须实现 Runnable 接口。执行 Callable 后,可以获取一个 Future 的对象,在该对象上调用 get 就可以获取到 Callable 返回的 Object 了,再结合线程池接口ExecutorService 就可以实现有返回结果的多线程了。