JAVA多线程实现方法
多线程一般实现由三种方法
(1)继承Thread类,重写run()方法
Thread本质上是实现Runnable接口的一个实例,它代表一个线程的实例,并且启动线程的唯一方法就是通过Thread类的start()方法。start()方法将启动一个新线程,并执行run()方法
(Thread类中提供的run方法是个空方法)
源代码:
该run是个空方法,所以可以继承下来,进行重写
自定义类然后继承Thread,并重写run()方法,就可以启动新线程并执行自己定义的run方法。
但注意调用start()方法后并不是立即执行多线程代码,而是使该线程变为可运行状态,至于什么时候执行,那是操作系统来决定的。
(2)实现Runnable接口,并实现该接口的run()方法
看源码
发现Thread这个类中,实现了Runnable 这个接口中的方法。
总结其实两种方法都可以实现多线程,但始终都离不开Thread的API去控制线程。
(3)实现Callable接口,重写call()方法
Callable接口实现属于Executor框架中的功能类,callable接口与Runnable接口的功能类似,但提供了比Runnable更加强大的功能
(1)任务结束提供返回值
(2)call可以抛出异常
(3)运行Callable可以获取Future对象,Future对象表示异步计算的结果,他提供了计算是否完成的方法。可以使用Future来监视目标线程call()方法的情况,当调用Future的get方法获取结果时,但线程会阻塞,知道call()方法结束后返回结果。