① 继承Thread类,重写run方法,这种方式方便传参但只能单继承;
    ② 实现Runnable接口的run方法,这种方式不受限于单继承;
    ③ 实现Callable接口的call方法作为一个任务类,之后作为参数实例化一个FutureTask对象,创建异步任务,这种方式可以获取执行后的返回值;
    ④ 注意不能直接调用 Thread对象的 run 方法,这样的话只是在当前线程调用,相当于普通方法调用,并不会像调用 start 方法一样启动新线程,这样多线程就不起作用了;