欢迎来到天天文库
浏览记录
ID:8960789
大小:16.55 KB
页数:4页
时间:2018-04-13
《java多线程实现和应用总结》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、JAVA多线程实现和应用总结最近在做代码优化时学习和研究了下JAVA多线程的使用,看了菜鸟们的见解后做了下总结。1.JAVA多线程实现方式JAVA多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没有返回值,只有最后一种是带返回值的。2.继承Thread类实现多线程继承Thread类的方法尽管被我列为一种多线程实现方式,但Thread本质上也是实现了Runnable接口的一个实例,它代表一个线程的实例,并且,启动线程的唯一方法就是通过Thread
2、类的start()实例方法。start()方法是一个native方法,它将启动一个新线程,并执行run()方法。这种方式实现多线程很简单,通过自己的类直接extendThread,并复写run()方法,就可以启动新线程并执行自己定义的run()方法。例如:publicclassMyThreadextendsThread{ publicvoidrun(){ System.out.println("MyThread.run()"); }}在合适的地方启动线程如下:MyThreadmyThread1=newMyThread();MyThreadmyThread2=newMyThrea
3、d();myThread1.start();myThread2.start();3.实现Runnable接口方式实现多线程如果自己的类已经extends另一个类,就无法直接extendsThread,此时,必须实现一个Runnable接口,如下:publicclassMyThreadextendsOtherClassimplementsRunnable{ publicvoidrun(){ System.out.println("MyThread.run()"); }}为了启动MyThread,需要首先实例化一个Thread,并传入自己的MyThread实例:MyThreadmy
4、Thread=newMyThread();Threadthread=newThread(myThread);thread.start();事实上,当传入一个Runnabletarget参数给Thread后,Thread的run()方法就会调用target.run(),参考JDK源代码:publicvoidrun(){ if(target!=null){ target.run(); }}4.使用ExecutorService、Callable、Future实现有返回结果的多线程ExecutorService、Callable、Future这个对象实际上都是属于Executor框架
5、中的功能类。想要详细了解Executor框架的可以访问http://www.javaeye.com/topic/366591,这里面对该框架做了很详细的解释。返回结果的线程是在JDK1.5中引入的新特征,确实很实用,有了这种特征我就不需要再为了得到返回值而大费周折了,而且即便实现了也可能漏洞百出。可返回值的任务必须实现Callable接口,类似的,无返回值的任务必须Runnable接口。执行Callable任务后,可以获取一个Future的对象,在该对象上调用get就可以获取到Callable任务返回的Object了,再结合线程池接口ExecutorService就可以实现传说中有返
6、回结果的多线程了。下面提供了一个完整的有返回结果的多线程测试例子,在JDK1.5下验证过没问题可以直接使用。代码如下:importjava.util.concurrent.*;importjava.util.Date;importjava.util.List;importjava.util.ArrayList;/***Java线程:有返回值的线程**@authorwb_qiuquan.ying*/@SuppressWarnings("unchecked")publicclassTest{publicstaticvoidmain(String[]args)throwsExecution
7、Exception, InterruptedException{ System.out.println("----程序开始运行----"); Datedate1=newDate(); inttaskSize=5; //创建一个线程池 ExecutorServicepool=Executors.newFixedThreadPool(taskSize); //创建多个有返回值的任务 Listlist=newArrayList<
此文档下载收益归作者所有