ITPub博客

首页 > 应用开发 > Java > Java多线程实现方式

Java多线程实现方式

原创 Java 作者:好程序员 时间:2020-07-15 14:04:32 0 删除 编辑

  好程序员 Java 培训分享 Java 多线程实现方式, Java 多线程实现方式主要有三种:继承Thread 类、实现 Runnable 接口、使用 ExecutorService Callable Future 实现有返回结果的多线程。其中前两种方式线程执行完后都没有返回值,只有最后一种是带返回值的。如下:

   1 、继承 Thread 类实现多线程

   继承Thread 类的方法尽管被我列为一种多线程实现方式,但 Thread 本质上也是实现了 Runnable 接口的一个实例,它代表一个线程的实例,并且,启动线程的唯一方法就是通过 Thread 类的 start() 实例方法。 start() 方法是一个 native 方法,它将启动一个新线程,并执行 run() 方法。这种方式实现多线程很简单,通过自己的类直接 extend Thread ,并复写 run() 方法,就可以启动新线程并执行自己定义的 run() 方法。例如:

   [ Java ] view plain copypublic class MyThread extends Thread {

   public void run() {

   System.out.println("MyThread.run()");

   }

   }

   在合适的地方启动线程如下:

   [ Java ] view plain copyMyThread myThread1 = new MyThread();

   MyThread myThread2 = new MyThread();

   myThread1.start();

   myThread2.start();

   2 、实现 Runnable 接口方式实现多线程

   如果自己的类已经extends 另一个类,就无法直接 extends Thread ,此时,必须实现一个 Runnable 接口,如下:

   [ Java ] view plain copypublic class MyThread extends OtherClass implements Runnable {

   public void run() {

   System.out.println("MyThread.run()");

   }

   }

   为了启动MyThread ,需要首先实例化一个 Thread ,并传入自己的 MyThread 实例:

   [ Java ] view plain copyMyThread myThread = new MyThread();

   Thread thread = new Thread(myThread);

   thread.start();

   事实上,当传入一个Runnable target 参数给 Thread 后, Thread run() 方法就会调用 target.run() ,参考 JDK 源代码:

   [ Java ] view plain copypublic void run() {

   if (target != null) {

   target.run();

   }

   }

   3 、使用 ExecutorService Callable Future 实现有返回结果的多线程

   ExecutorService Callable Future 这个对象实际上都是属于 Executor 框架中的功能类。 这里面对该框架做了很详细的解释。返回结果的线程是在 JDK1.5 中引入的新特征,确实很实用,有了这种特征我就不需要再为了得到返回值而大费周折了,而且即便实现了也可能漏洞百出。

   可返回值的任务必须实现Callable 接口,类似的,无返回值的任务必须 Runnable 接口。执行 Callable 任务后,可以获取一个 Future 的对象,在该对象上调用 get 就可以获取到 Callable 任务返回的 Object 了,再结合线程池接口 ExecutorService 就可以实现传说中有返回结果的多线程了。


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/69913864/viewspace-2704650/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-03-20

  • 博文量
    342
  • 访问量
    150005