Java实现多线程的三种方法
2016-10-16 15:25
176 查看
何为线程?
进程 是资源分配的最小单位,由CPU分配内存,而 线程 则是资源调度与执行的单位,一个进程可拥有多条线程,并且共享进程的资源,同一进程内的线程都处于同一内存空间,CPU不会在额外为其分配空间。一个进程允许并发地运行多个线程。Java实现多线程的三种方法
Java实现多线程主要有三种方式:继承Thread类,实现Runnable接口,实现Callable接口。前两种方式线程执行完没有返回值,而第三种方式有返回值。1.继承Thread类实现多线程
直接继承Thread类并重写其中run()方法实现多线程,是实现多线程最简单常用的一种方式。实质上Thread类也实现了Runnable接口。在实现线程时只需要创建子类对象,调用start()方法即可,记住不是调用run()方法,调用run()方法只算是普通的调用类内部方法而不算是实现线程,只有调用start()方法,才会生成新线程,并将新线程加入线程组中等待CPU调用。
简单示例:
public class MyThread extends Thread { public void run() { System.out.println("CreatThread"); } }
调用启动线程:
Thread t2=new Thread(); Thread t3=new Thread(); t1.start(); t2.start();
使用这种方式创建多线程的缺点是:类必须继承Thread类,而Java为单继承,从而不能再继承其他的类了,如果一个类已经继承了其他类(如小程序必须继承Applet类),就无法继承Thread类了。
2.实现Runnable接口实现多线程
实现Runnable接口实现多线程打破了单继承的局限性。只需通过实现Runnable接口并重写其中的run()方法即可。
简单示例:
实现Runnable接口:
public class MyThread implements Runnable { public void run() { System.out.println("CreatThread"); } }
为了启动MyThread,需要首先实例化一个Thread,并传入自己的MyThread实例:
MyThread myThread = new MyThread(); Thread thread = new Thread(myThread); thread.start();
推荐使用实现Runnable接口实现多线程,因为:
1.避免了单继承的局限性。
2.便于多线程间共享资源。
3.使用ExecutorService、Callable、Future实现有返回结果的多线程
返回结果的线程是在JDK1.5中引入的新特征,ExecutorService、Callable、Future这个对象实际上都是属于Executor框架中的功能类。想要详细了解Executor框架的可以访问http://www.javaeye.com/topic/366591 ,这里面对该框架做了很详细的解释。这种方式实现线程首先的实现Callable接口,并重写其中的call()方法,再借助执行调度服务ExecutorService获取Future对象,通过Future对象实例调用get()就可以获取到Callable任务返回的Object了.
简单示例:
创建Callable实现类,重写call()方法:
class MyThread implements Callable{ @Override public Object call() throws Exception { String result="CreatThread"; return result; } }
创建并调用线程:
public static void main(String[] args) throws InterruptedException, ExecutionException { // 创建固定数目线程的线程池。 ExecutorService pool=Executors.newFixedThreadPool(1); //创建Callable实现类实例 MyThread myThread=new MyThread(); // 执行任务并获取Future对象 Future future=pool.submit(myThread); //获取返回值 String result=future.get().toString(); //System.out.println(">>>" + result); //停止服务 pool.shutdownNow(); }
如此就实现了多线程,通过这种方法实现多线程有返回值,并且可以向外抛出异常,但是代码相对繁琐。
相关文章推荐
- JAVA多线程(五)用lock、synchronized、阻塞队列三种方法实现生产者消费者模式
- JAVA基础知识之多线程——三种实现多线程的方法及区别
- 最新 java多线程的三种实现方法
- Java 多线程实现的三种方法,附两个线程执行不同的输出
- Java多线程实现的三种方法
- Java中实现多线程的三种方法
- java实现多线程三种方法
- java多线程---顺序打印ABC的三种实现---join方法
- Java多线程的三种实现方法
- java:ajax实现无跳转刷新的三种方法
- Java 多线程的两种简单实现方法
- java 三种多线程的创建方法Thread,Handler,Runnable
- 初学Java多线程:向线程传递数据的三种方法
- [java]多线程2种实现方法
- java 三种多线程的创建方法Thread,Handler,Runnable
- JAVA技巧(Java定时执行任务的实现方法) 定时执行任务的三种方法
- Java实现多线程的3种方法
- java多线程的实现方法
- java多线程--实现runnable方法
- 7. 初学Java多线程:向线程传递数据的三种方法