欢迎来到代码驿站!

JAVA代码

当前位置:首页 > 软件编程 > JAVA代码

Java多线程三种主要实现方式解析

时间:2021-02-11 11:23:31|栏目:JAVA代码|点击:

多线程三种主要实现方式:继承Thread类,实现Runnable接口、Callable和Futrue。

一、简单实现

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
import java.util.concurrent.TimeUnit;

public class T02_HowToCreateThread {
  //1.继承Thread类
  static class MyThread extends Thread{
    @Override
    public void run() {
      System.out.println("MyThread-->");
    }
  }
  //3.实现Runnable接口
  static class MyRun implements Runnable{

    @Override
    public void run() {
      System.out.println("MyRunable-->");
    }
  }
  //4.实现Callable接口
  static class MyCall implements Callable{

    @Override
    public Object call() throws Exception {
      System.out.println("myCallable-->");
      return 1;
    }
  }
  public static void main(String[] args) throws ExecutionException, InterruptedException {
    //1.继承Thread类
    new MyThread().start();
    //2.lambda与继承Thread类类//1.继承Thread类似,最简单
    new Thread(()->{
      System.out.println("lambda-->");
    }).start();
    //3.实现Runnable接口
    new Thread(new MyRun()).start();
    new Thread(new Runnable() {
      @Override
      public void run() {
        System.out.println("simple->Runnable");
      }
    }).start();
    //4.实现Callable接口,并用包装器FutureTask来同时实现Runable、Callable两个接口,可带返回结果
    MyCall mycall = new MyCall();
    FutureTask futureTask = new FutureTask(mycall);
    new Thread(futureTask).start();
    System.out.println(futureTask.get());
  }
}

二、使用ExecutorService、Callable和Future一起实现带返回值

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.*;

/**
 * 使用ExecutorsService、Callable、Future来实现多个带返回值的线程
 */
public class T02_HowToCreateThread02 {
  static class MyCallable implements Callable{
    private int taskNum;

    public MyCallable(int taskNum){
      this.taskNum = taskNum;
    }
    @Override
    public Object call() throws Exception {
      System.out.println("任务"+taskNum);
      return "MyCallable.call()-->task"+taskNum;
    }
  }
  public static void main(String[] args) throws ExecutionException, InterruptedException {
    int num = 5;
    //创建一个线程池
    ExecutorService pool = Executors.newFixedThreadPool(num);
    List<Future> futureList = new ArrayList<Future>();
    for (int i = 0; i < num; i++){
      MyCallable mc = new MyCallable(i);
      //执行任务,并返回值
      Future future = pool.submit(mc);
      futureList.add(future);
    }
    pool.shutdown();
    for (Future f: futureList){
      System.out.println(f.get());
    }
  }
}

结果:

上一篇:java实现XML增加元素操作简单示例

栏    目:JAVA代码

下一篇:深入了解Java中的Filter过滤器

本文标题:Java多线程三种主要实现方式解析

本文地址:http://www.codeinn.net/misctech/61341.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有