- 创建线程的方法有3种:
- 1. 自定义类继承Thread类, 重写run()方法, 创建子类对象, 调用start()方法启动线程. 这种方法的缺点是占用了继承
- 2. 自定义类实现Runnable接口, 重写run()方法, 创建实现类对象, 然后创建多个线程的Thread对象, 创建的时候将实现类对象作为构造器参数传入, 然后使用Thread对象调用start()方法启动线程, 这种方法的好处是不占用继承
- 3. 使用线程池的方法. 自定义类实现Callable接口, 重写call()方法, 注意Callable接口有泛型, call()方法要有泛型类的返回值. 然后创建线程池对象, 使用Executors类的3种创建线程池的方法都可以, 一般使用newFixedThreadPool, 返回一个ExecutorService类的线程池对象, 用该对象调用submit方法, 将Callable实现类对象传入, 创建几个线程就创建几个实现类对象并执行几个submit, submit会返回Future类的线程运行结果. 这种方法创建的线程只在最初创建一次, 执行完毕后回到线程池中等待, 除非调用线程池的shutdown方法关闭线程池才会销毁, 节省资源且效率高
|
|