创建多线程_Java多线程创建方式
发布日期:2021-06-24 17:21:44 浏览次数:2 分类:技术文章

本文共 2920 字,大约阅读时间需要 9 分钟。

261a4c2d1fa122663116ee250d4d0ba3.png

多线程的创建方式:

  1. 实现Runnable接口
  2. 继承Thread类,重写run方法
  3. 线程池
  4. 通过Callable和FutureTask创建线程

具体实现:

1、实现Runnable接口,重写run方法,实现Runnable接口的实现类的实例对象作为Thread构造函数的target

package com.example.demo;public class ThreadDemo implements Runnable {    public void run(){        //编写自己的线程代码        System.out.println(Thread.currentThread().getName());    }    public static void main(String[] args) {        ThreadDemo d = new ThreadDemo();        new Thread(d).start();    }}

优点:可以继承其他类

缺点:实现相对复杂

2、继承Thread类,重写run方法

package com.example.demo;public class ThreadDemo extends Thread {
public void run(){
//编写自己的线程代码 System.out.println(Thread.currentThread().getName()); }}

优点:简单

缺点:不能继承其他类了,功能单一

3、通过线程池创建线程

package com.example.demo;import com.alibaba.fastjson.JSON;import java.util.ArrayList;import java.util.List;import java.util.concurrent.*;public class ThreadDemolTest {    private static ExecutorService threadPool = new ThreadPoolExecutor(            3,            3,             6000,            TimeUnit.SECONDS,            new LinkedBlockingDeque<>(1),            Executors.defaultThreadFactory(),            new ThreadPoolExecutor.CallerRunsPolicy());    public static void main(String[] args) {        List
> list = new ArrayList<>(); for(int i =0;i<10;i++){ Future future = threadPool.submit(new TestWorkDemol()); list.add(future); } for(Future future:list){ try { Object o= future.get(); System.out.println("************"+JSON.toJSONString(o)); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } } threadPool.shutdown(); }}public class TestWorkDemol implements Callable{ @Override public Object call() throws Exception { return Thread.currentThread().getName()+"测试"; }}

4、通过Callable和FutureTask创建线程(实现Callable接口,重写call()方法,并包装成FutureTask对象传入Thread构造器)

package com.example.demo;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.concurrent.FutureTask;public class ThreadDemo {    public static void main(String[] args) {        TestWorkDemol t = new TestWorkDemol();        FutureTask futureTask = new FutureTask(t);        Thread thread = new Thread(futureTask);        thread.start();        try {            Object result = futureTask.get();            System.out.println(JSON.toJSONString(result));        } catch (InterruptedException e) {            e.printStackTrace();        } catch (ExecutionException e) {            e.printStackTrace();        }    }}public class TestWorkDemol implements Callable{    @Override    public Object call() throws Exception {        return "测试";    }}

实质是三种创建方式。

注意:get方法是阻塞的,即:线程无返回结果,get方法会一直等待。

转载地址:https://blog.csdn.net/weixin_34081553/article/details/112625422 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:插入公式_插入数学公式快捷方式
下一篇:获取input数据_时间序列数据建模流程范例

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2024年04月05日 19时19分26秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章