java多线程实现和应用总结

java多线程实现和应用总结

ID:8960789

大小:16.55 KB

页数:4页

时间:2018-04-13

java多线程实现和应用总结_第1页
java多线程实现和应用总结_第2页
java多线程实现和应用总结_第3页
java多线程实现和应用总结_第4页
资源描述:

《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<

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。