方式一:创建Thread子类
- 创建子类继承Thread类。
- 子类中重写Thread类中的run()方法(通常run方法即为实现线程功能的方法)。
- 创建Thread子类对象(即创建了线程对象)。
- 调用线程对象start方法:启动线程(即调用run())。
方式二:实现Runnable接口
- 创建Runnable接口子类
- 子类中重写接口中实现run()方法
- 通过Thread类含参构造器创建线程对象
- 将Runnable接口子类对象作为参数传递给Thread类的构造器中。
- 调用Thread类的start方法:开启线程(即调用run方法)
方式三:实现Callable接口
- 创建Callable接口子类
- 子类中重写接口中的实现方法call()方法
- 创建Callable接口的实现类的对象
- 将实现类对象作为参数传递到FutureTask类的构造器内,创建FutureTest的对象
- 将FutureTask的对象作为参数传递到Thread类构造器中,创建Thread对象并调用start()方法启动线程
- 调用get()方法获取Callable中call方法的返回值(需要返回值时可加此步)
方式四:利用线程池
- 创建Runnable接口子类(或创建Callable接口子类)
- 子类中重写接口中的实现方法run()(或call()方法)
- 提供指定线程数量的线程池
- 执行指定的线程的操作。需要提供实现Runnable接口或Callable接口实现类的对象
- 关闭连接池
3>ExecutorService executorService = Executors.newFixedThreadPool(线程个数);
4>executorService.execute(Runnable的实现类对象)或executorService.execute(Callable的实现类的对象)
5>executorService.Shutdown();