- 通过扩展Thread类来创建多线程:
定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务。 - 通过实现Runnable接口来创建多线程
定义runnable接口的实现类,并重写该接口的run()方法,该run()方法的方法体同样是多线程需要执行的线程任务。 - 通过线程池实现
定义线程池实例,使用的时候从线程池中获取线程使用。 - 通过Callable和Future创建线程
创建Callable接口的实现类,并实现call()方法,该call()方法将作为线程执行体,并且有返回值
创建Callable实现类的实例,使用FutureTask类来包装Callable对象,该FutureTask对象封装了该
Callable对象的call()方法的返回值。
使用FutureTask对象作为Thread对象的target创建并启动新线程。
调用FutureTask对象的get()方法来获得子线程执行结束后的返回值
五种线程池:
- SingleThreadExecutor
SingleThreadExecutor:这是一个单线程的Executor,它创建单个工作线程来执行任务,如果这个线程异常结束,会创建一个新的来替代它;它的特点是能确保依照任务在队列中的顺序来串行执行
代码:Executors.newSingleThreadExecutor() - CachedThreadPool:
创建一个可缓存的线程池,如果线程池的规模超过了处理需求,将自动回收空闲



