初始化线程的4种方式

1. 继承Thread

缺点:无法获取线程的运算结果。

public class ThreadTest{
    public static void main(String[] args){
        Thread01 thread = new Thread01();
        thread.start();
    }


    public static class Thread01 extends Thread{
        public void run(){
            System.out.println("当前线程:" + Thread.currentThread().getId());
            int i = 10 / 2;
            
            System.out.println("运行结果:" + i);
        }
    }
    
}

2. 实现Runnable接口

缺点:无法获取线程的运算结果。

public class ThreadTest{
    public static void main(String[] args){
        Runnable01 runnable01 = new Runnable01();
        Thread01 thread = new Thread01(runnable01);
        thread.start();
    }


    public static class Runnable01 implement Runnable{
        public void run(){
            System.out.println("当前线程:" + Thread.currentThread().getId());
            int i = 10 / 2;
            
            System.out.println("运行结果:" + i);
        }
    }
    
}

3. 实现Callable接口  + FutureTask 

主线程可以获取线程的运算结果,可以处理异常,但是不利于控制服务器中的线程资源,会导致服务器资源耗尽。

public class ThreadTest{
    public static void main(String[] args){
        FutureTask<Integer> futureTask = new FutureTask<>(new Callable01());
        Thread01 thread = new Thread01(futureTask );
        thread.start();

        Integer result = futureTask.get();
        System.out.println("返回结果:" + result);
    }


    public static class Callable01 implement Callale<Integer>{
        public void run(){
            System.out.println("当前线程:" + Thread.currentThread().getId());
            int i = 10 / 2;
            
            System.out.println("运行结果:" + i);
            return i; 
        }
    }
    
}

4. 线程池

通过线程池性能稳定,也可以获取执行结果,并捕获异常,但是在业务复杂情况下,一个异步调用可能会依赖另一个异步调用的执行结果。

通过如下两种方式初始化线程池:

Executors.newFiexedThreadPool(3);

或者

new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, TimeUnit unit, workQueue, threadFactory,handler);

4.1 线程池的七大参数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值