实现多线程的方式
1、继承Thread类(不建议使用,避免OOP(面向对象程序设计(Object Oriented Programming))
单继承局限性);
2、实现Runnable接口(推荐,避免了单继承的局限性,灵活方便);
3、实现Callable接口;
4、线程池:提供了一个线程队列,队列中保存着所有等待状态的线程。避免了创建与销毁额外开销,提高了响应的速度。
当我们点开Thread类,可以发现其实Thread类也是继承了Runnable接口的;
区别
1、通过继承Thread类实现多线程,启动流程时,直接使用线程对象调用start()调用即可,而Runnable接口不能直接用类对象直接调用,必须得把类对象放入thread方法中才可调用start();
2、使用Runnable接口多线程操作是写在run()里面;而使用Callable接口是写在call() 方法中;
3、run方法是无返回值的,call方法是有返回值的;
4、run方法是无需抛出异常的,但是call方法需要抛出异常;