-
一种方法是继承
Thread
类。 这个子类应该重写run
类的方法Thread
。 然后可以分配并启动子类的实例。继承Thread类的线程类不能再继承其他父类。 -
一种是实现类
Runnable
接口来创建一个线程。 那个类然后实现了run
方法。 然后可以分配类的实例,在创建Thread
时作为参数传递,并启动。 -
一种是实现
Callable
接口类似于Runnable
,因为它们都是为其实例可能由另一个线程执行的类设计的。 然而,ARunnable
不返回结果,也不能抛出被检查的异常。线程只是实现Runnable或实现Callable接口,还可以继承其他类,所以通常选用实现接口方式。 -
一种是使用线程池ThreadPoolExecutor创建新线程 public class ThreadPoolExecutor extends AbstractExecutorService
线程池解决两个不同的问题:由于每个任务的调用开销减少,它们通常在执行大量异步任务时提供改进的性能,并且它们提供 了一种限制和管理资源(包括执行一个任务。 每个ThreadPoolExecutor
还维护一些基本统计信息,例如已完成任务的数量。