• 技术文章 >Java >java教程

    详解Java实现多线程的三种方式

    高洛峰高洛峰2017-01-05 16:50:21原创514
    本文实例为大家分享了Java实现多线程的三种方式,供大家参考,具体内容如下

    import java.util.concurrent.Callable;
    import java.util.concurrent.FutureTask;
     
    public class Main {
     
      public static void main(String[] args) {
        //方法一:继承Thread
        int i = 0;
    //    for(; i < 100; i++){
    //      System.out.println(Thread.currentThread().getName() + " " + i);
    //      if (i == 5) {
    //        ThreadExtendsThread threadExtendsThread = new ThreadExtendsThread();
    //        threadExtendsThread.start();
    //      }
    //    }
         
        //方法二:实现Runnable
    //    for(i = 0; i < 100; i++){
    //      System.out.println(Thread.currentThread().getName() + " " + i);
    //      if (i == 5) {
    //        Runnable runnable = new ThreadImplementsRunnable();
    //        new Thread(runnable).start();
    //        new Thread(runnable).start();
    //      }
    //    }
     
        //方法三:实现Callable接口
        Callable<Integer> callable = new ThreadImplementsCallable();
        FutureTask<Integer> futureTask = new FutureTask<>(callable);
        for(i = 0; i < 100; i++){
          System.out.println(Thread.currentThread().getName() + " " + i);
          if (i == 5) {
            new Thread(futureTask).start();
            new Thread(futureTask).start();
          }
        }
        try {
          System.out.println("futureTask ruturn: " + futureTask.get());
        } catch (Exception e) {
          e.printStackTrace();
        }
      }
     
    }

    方法一,继承自Thread

    public class ThreadExtendsThread extends Thread {
      private int i;
      @Override
      public void run() {
        for(; i < 100; i++) {
          System.out.println(getName() + " " + i); 
        }
      }
    }

    run方法为线程执行体,ThreadExtendsThread对象即为线程对象。

    方法二,实现Runnable接口

    public class ThreadImplementsRunnable implements Runnable {
      private int i;
      @Override
      public void run() {
        for(; i < 100; i++){
          System.out.println(Thread.currentThread().getName() + " " + i);
        }
      }
    }

    run方法为线程执行体,使用时New一个Thread对象,Runnable对象作为target传递给Thread对象。且同一个Runnable对象可作为多个Thread的target,这些线程均共享Runnable对象的实例变量。

    方法三,实现Callable接口

    import java.util.concurrent.Callable;
     
    public class ThreadImplementsCallable implements Callable<Integer> {
      private int i;
       
      @Override
      public Integer call() throws Exception {
        for(; i < 100; i++){
          System.out.println(Thread.currentThread().getName() + " " + i);
        }
        return i;
      }
    }

    Callable接口类似于Runnable接口,但比对方强大,线程执行体为call方法,该方法具有返回值和可抛出异常。使用时将Callable对象包装为FutureTask对象,通过泛型指定返回值类型。可稍候调用FutureTask的get方法取回执行结果。

    以上就是本文的全部内容,希望对大家的学习有所帮助。

    更多详解Java实现多线程的三种方式相关文章请关注PHP中文网!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:Java 多线程
    上一篇:java多线程之线程安全的单例模式 下一篇:Java 实现多线程的几种方式汇总
    大前端线上培训班

    相关文章推荐

    • 理解java8中java.util.function.*pojo反射新方法(附代码)• 浅析安卓app和微信授权登录及分享完整对接(代码分享)• 教你一招搞定时序数据库在Spring Boot中的使用• 一招教你使用java快速创建Map(代码分享)• PlayFramework 完整实现一个APP(十一)

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网