用线程池的两种方式Runnable和Callable

  1. 使用线程池方式–Runnable接口

通常,线程池都是通过线程池工厂创建,再调用线程池中的方法获取线程,再通过线程去执行任务方法。
Executors:线程池创建工厂类
public static ExecutorService newFixedThreadPool(int nThreads):返回线程池对象
ExecutorService:线程池类
Future<?> submit(Runnable task):获取线程池中的某一个线程对象,并执行
Future接口:用来记录线程任务执行完毕后产生的结果。线程池创建与使用

使用线程池中线程对象的步骤:
创建线程池对象
创建Runnable接口子类对象
提交Runnable接口子类对象
关闭线程池

public class ThreadPoolDemo {
          public static void main(String[] args) {

        //创建线程池对象
        ExecutorService service = Executors.newFixedThreadPool(2);//包含2个线程对象
        //创建Runnable实例对象
        MyRunnable r = new MyRunnable();      

        //自己创建线程对象的方式
        //Thread t = new Thread(r);

        //t.start();
      //调用MyRunnable中的run()       

        //从线程池中获取线程对象,然后调用MyRunnable中的run()

        service.submit(r);

        //再获取个线程对象,调用MyRunnable中的run()

        service.submit(r);

        service.submit(r);//注意:submit方法调用结束后,程序并不终止,是因为线程池控制了线程的关闭。将使用完的线程又归还到了线程池中

           //关闭线程池

        service.shutdown();

    }

}

 Runnable接口实现类

public
class MyRunnable implements Runnable {

    @Override

    public void run() {

        System.out.println("我要一个教练");    

        try{
            Thread.sleep(2000);
        }catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("教练来了: "+Thread.currentThread().getName());
        System.out.println("教我游泳,交完后,教练回到了游泳池");

    }

}



  1. 使用线程池方式—Callable接口

Callable接口:与Runnable接口功能相似,用来指定线程的任务。其中的call()方法,用来返回线程任务执行完毕后的结果,call方法可抛出异常。
ExecutorService:线程池类
Future submit(Callable task):获取线程池中的某一个线程对象,并执行线程中的call()方法
Future接口:用来记录线程任务执行完毕后产生的结果。线程池创建与使用

使用线程池中线程对象的步骤:
创建线程池对象
创建Callable接口子类对象
提交Callable接口子类对象
关闭线程池

public class ThreadPoolDemo {

    public static void main(String[] args) {
        //创建线程池对象
        ExecutorService service = Executors.newFixedThreadPool(2);//包含2个线程对象

        //创建Callable对象
        MyCallable c = new MyCallable();     

        //从线程池中获取线程对象,然后调用MyRunnable中的run()
        service.submit(c);      

        //再获取个教练

        service.submit(c);

        service.submit(c);

       //注意:submit方法调用结束后,程序并不终止,是因为线程池控制了线程的关闭。将使用完的线程又归还到了线程池中

 

       //关闭线程池

        service.shutdown();

    }

}

l  Callable接口实现类,call方法可抛出异常、返回线程任务执行完毕后的结果

public
class MyCallable implements Callable {

    @Override

    public
Object call() throws Exception {

        System.out.println("我要一个教练:call");

        Thread.sleep(2000);

        System.out.println("教练来了: "
+Thread.currentThread().getName());

        System.out.println("教我游泳,交完后,教练回到了游泳池");

        return null;

    }

}



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值