多线程的创建方式有哪些

发布时间:2020-06-12 09:26:31 作者:Leah
来源:亿速云 阅读:442

多线程的创建方式有哪些?针对这个问题,这篇文章给出了相对应的分析和解答,希望能帮助更多想解决这个问题的朋友找到更加简单易行的办法。  

创建方式一:继承 Thread 类:

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

public class MyThread extends Thread {
  

public void run() {
  

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

}
  

}
  

MyThread myThread1 = new MyThread(); 7.MyThread myThread2 = new MyThread(); myThread1.start();
  

myThread2.start();
  

创建方式二:实现 Runnable 接口的方式实现多线程,并且实例化 Thread,传入自己的Thread 实例,调用 run( )方法
  

public class MyThread implements Runnable
  

public void run() {
  

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

}
  

}
  

MyThread myThread = new MyThread();
  

Thread thread = new Thread(myThread);
  

thread.start();
  

创建方式三:使用 ExecutorService、Callable、Future 实现有返回结果的多线程:ExecutorService、Callable、Future 这 个 对 象 实 际 上 都 是 属 于 Executor 框 架 中 的 功 能 类 。
  

下面提供了一个完整的有返回结果的多线程测试例子,在JDK1.5 下验证过没问题可以直接使用。代码如下:
  

import java.util.concurrent.*;
  

import java.util.Date;
  

import java.util.List;
  

import java.util.ArrayList;
  

/**
  

* 有返回值的线程
  

*/
  

@SuppressWarnings("unchecked")

public class Test {
  

public static void main(String[] args) throws ExecutionException,

InterruptedException {
  

System.out.println("----程序开始运行----");

Date date1 = new Date();

int taskSize = 5;

// 创建一个线程池
  

ExecutorService pool = Executors.newFixedThreadPool(taskSize);

// 创建多个有返回值的任务
 

List<Future> list = new ArrayList<Future>();

for (int i = 0; i < taskSize; i++) {

Callable c = new MyCallable(i + " ");

// 执行任务并获取 Future 对象
  

Future f = pool.submit(c);
  

// System.out.println(">>>" + f.get().toString());

list.add(f);
  

}
 

// 关闭线程池
 

pool.shutdown();
  

// 获取所有并发任务的运行结果
  

for (Future f : list) {
  

// 从 Future 对象上获取任务的返回值,并输出到控制台

System.out.println(">>>" + f.get().toString());

}
 

Date date2 = new Date();
  

System.out.println("----程序结束运行----,程序运行时间【"

+ (date2.getTime() - date1.getTime()) + "毫秒】");

}
  

}
 

class MyCallable implements Callable<Object> {

private String taskNum;
  

MyCallable(String taskNum) {

this.taskNum = taskNum;

}
 

public Object call() throws Exception {
  

System.out.println(">>>" + taskNum + "任务启动");
  

Date dateTmp1 = new Date(); 53.Thread.sleep(1000);
  

Date dateTmp2 = new Date();
 

long time = dateTmp2.getTime() - dateTmp1.getTime(); 56.System.out.println(">>>" + taskNum + "任务终止");
  

return taskNum + "任务返回运行结果,当前任务时间【" + time + "毫秒】";

}
 

}

以上便是多线程的创建方式介绍,虽然从篇幅上看很复杂,但是示例代码非常详细且容易理解,如果想了解更多相关内容,请关注亿速云行业资讯。

推荐阅读:
  1. 实现多线程的方式有哪些
  2. 创建RDD的方式有哪些

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

java 多线程创建 线程的创建

上一篇:shell实现批量免密钥登录的方法

下一篇:Nginx的性能优化

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》