这期内容当中小编将会给大家带来有关在Java中实现多线程需要使用哪些关键词、文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
<强> 1。关于Ranable和调用强>
首先Java中创建线程的方法有三种:
- <李>继承线程类,覆盖运行方法李> <李>实现Runable接口,实现运行方法李> <李>实现可调用的接口,实现运行方法李>
继承线,单继承的缘,故不能再继承其他类,获取当前线程这
实现Runable接口,没有返回值,获取当前线程Thread.currentThread ()
实现可调用的接口,可通过Future.get()获取返回值,获取当前线程Thread.currentThread ()
继承线,两个步骤:
类DemoThread扩展线程{ @Override 公共空间run () { super.run ();//执行耗时的操作… } } 新DemoThread DemoThread t=(); t.start ();
- <李>继承线程类,覆盖运行()方法。李> <>李创建线程对象并开始用()方法启动线程。李>
实现Runable,一般使用如下:
新线程(新Runnable () { @Override 公共空间run () {//做某事 } }).start ();
为了简单。
以上两种方式获取线程执行的结果相当麻烦,不能直接获取.JDK1.5增加了可调用,调用的调用()方法可以返回值和抛出异常.Callable可以返回装载有计算结果的未来对象。
可调用的源码:
公共接口Callable{ V叫()抛出异常; }
可调用的基本使用方法:
FutureTaskfutureTask=new FutureTask (新的Callable () { @Override 公共整数调用()抛出异常{//做某事 返回null; } }); 线程的线程=新线程(futureTask); thread.start (); 整数结果=futureTask.get ();
运行可调用的任务可以拿到一个未来的对象,通过未来的获得()方法拿到线程执行的返回值。那么……将来,
FutureTask区别是什么,怎么使用?
→下一个()
<强> 2。关于未来和FutureTask 强>
为了获取线程的执行结果,引入了未来的FutureTask,那么他们是什么关系,如何使用?
未来类位于java.util。concurrent包下,它是一个接口:
公共接口Future{ 布尔取消(布尔mayInterruptIfRunning); 布尔isCancelled (); 布尔结束(); V get()抛出InterruptedException, ExecutionException; V获得(长超时,TimeUnit unit) 抛出InterruptedException,中TimeoutException; }
<>强未来定义了5个方法:强>
1)布尔取消(布尔mayInterruptIfRunning):试图取消对此任务的执行。如果任务已完成,或已取消,或者由于某些其他原因而无法取消,则此尝试将失败。当调用取消()时,如果调用成功,而此任务尚未启动,则此任务将永不运行。如果任务已经启动,则mayInterruptIfRunning参数确定是否应该以试图停止任务的方式来中断执行此任务的线程。此方法返回后,对结束()的后续调用将始终返回正确的。如果此方法返回真,则对isCancelled()的后续调用将始终返回真的。
2)布尔isCancelled():如果在任务正常完成前将其取消,则返回真的。
3)布尔结束():如果任务已完成,则返回正确的。可能由于正常终止,异常或取消而完成,在所有这些情况中,此方法都将返回真的。
4) V()抛出InterruptedException, ExecutionException:如有必要,等待计算完成,然后获取其结果。
5) V(长超时,TimeUnit unit)抛出InterruptedException,中TimeoutException:如有必要,最多等待为使计算完成所给定的时间之后,获取其结果(如果结果可用)。
<强>总的来说未来提供了三种功能:强>
判断任务是否完成;
能够中断任务,
能够获取任务执行结果。
RunnableFuture继承了Runnable接口和未来接口,而FutureTask实现了RunnableFuture接口。
FutureTask的实现:
公共类FutureTask实现RunnableFuture
RunnableFuture接口的实现:
公共接口RunnableFuture扩展了Runnable, Future { 空运行(); }
FutureTask是未来接口的一个唯一实现类。
除了可以用线程包装FutureTask外,还有另一种使用方法:
ExecutorService执行人=Executors.newCachedThreadPool (); FutureTaskfutureTask=new FutureTask (新的Callable () { @Override 公共整数调用()抛出异常{//做某事 返回null; } }); executor.submit (futureTask); 整数结果=futureTask.get (); 在Java中实现多线程需要使用哪些关键词