1)、继承Thread
2)、实现Runnable,接口
以上两种执行结果都是一样
3)、实现 Callable接口+FutureTask(可以拿到返回结果,可以处理异常
相当于阻塞整个线程执行完成,获取返回结果,才会往下执行,不获取结果跟Thread 和 Runnable执行结果是一样的效果
FutureTask<V>不仅可以接收Callable 还可以接收 Runnable
4)、线程池
多线程异步任务一般都是用线程池,业务上避免一直使用以上三种方式会浪费资源
使用Executors工具类,原生的线程池可自行了解使用
Executors.newFiexedThreadPool(3); //或者 new ThreadPoolExecutor(corePoolSize,maximumPoolSize,keepAliveTime, TimeUnit unit,workQueue, threadFactory, handler);
execute方法是无返值,submit按需使用都有返回值
以上四种的区别:
1,2不能得到返回值,3可以获取返回值
1,2,3都不能控制资源
4可以控制资源,性能稳定