栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

创建线程的四种方法

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

创建线程的四种方法

一、继承Thread,重写run方法

public class ThreadOne extends Thread {

    @Override
    public void run(){
        System.out.println(System.currentTimeMillis());
    }

    public static void main(String[] args) {
        Thread thread = new ThreadOne();
        thread.start();
    }
}

二、实现Runnable,重写run方法

public class ThreadTwo implements Runnable {
    @Override
    public void run() {
        System.out.println(System.currentTimeMillis());
    }

    public static void main(String[] args) {
        Thread thread = new Thread(new ThreadTwo());
        thread.start();
    }
}

三、 实现Callable接口,重写call()方法,然后包装成java.util.concurrent.FutureTask, 再然后包装成Thread;可以获得返回值

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


public class ThreadThree implements Callable {
    @Override
    public Object call() throws Exception {
        return System.currentTimeMillis();
    }

    public static void main(String[] args) throws ExecutionException, InterruptedException {
        FutureTask task = new FutureTask<>(new ThreadThree());
        new Thread(task).start();
        System.out.println(task.get()); //获得返回值
    }
}

四、线程池创建线程

public class ThreadFour{

    private final static Integer CORE_NUM = Runtime.getRuntime().availableProcessors();
    private static AtomicInteger atomicInteger = new AtomicInteger(0);
    // 为何要定制ThreadFactory?
    // 1、为了能够设置一个更有意义的线程名 .
    // 2、自主选择线程类型:守护线程或用户线程
    // 3、设置线程优先级
    // 4、处理未捕捉的异常
    private static ThreadFactory threadFactory = r -> new Thread(r, "thread-pool-"+ atomicInteger);
    private final static ThreadPoolExecutor POOL_EXECUTOR = new ThreadPoolExecutor(
            CORE_NUM,//核心线程池大小
            CORE_NUM,//最大的线程池大小
            3L,//超时了没有人调用就会释放
            TimeUnit.MILLISECONDS,//超时单位
            new linkedBlockingQueue(100),//阻塞队列
            threadFactory, //创建一个新线程时使用的工厂,可以用来设定线程名、是否为daemon线程等等
            new ThreadPoolExecutor.AbortPolicy() // 总是抛出拒绝执行异常
    );

    public static void main(String[] args) {
        POOL_EXECUTOR.execute(()-> System.out.println(System.currentTimeMillis()));
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/721160.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号