方式一: 实现Callable接口.
说明:
如何理解实现Callable接口的方式创建多线程比实现Runnable接口创建多线程方式强大?
1.call()可以返回值的.
2.call()可以抛出异常,被外面的操作捕获,获取异常的信息
3.Callable是支持泛型的
方式二: 使用线程池
好处: 1.提高相应速度(减少了创建新线程的时间)
2.降低资源消耗(重复利用线程池中线程,不需要每次都创建)
3.便于线程管理
corePoolSize: 核心池的大小
maximumPoolSize: 最大线程数
keepAliveTime: 线程没任务时最多保持多长时间后终止