Java基础学习:多线程08

Java基础学习:多线程08

  • 实现Callable接口:

    • 实现Callable接口,需要返回值类型

    • 重写call方法,需要抛出异常

    • 创建目标对象

    • 创建执行服务:ExecutorService ser=Executors.newFixedThreadPool(1);

    • 提交执行:Future<Boolean> result1=ser.submit(t1);

    • 获取结果:boolean r1=result1.get();

    • 关闭服务:ser.shutdownNow();

       

  • 代码案例:


    /**
    * 线程创建方式3:实现Callable
    *
    * Callable的好处:
    * 1,可以定义返回值;
    * 2,可以抛出异常;
    */
    public class TestCallable implements Callable {

       private String name;
       private String url;

       public TestCallable(String url,String name){
           this.name=name;
           this.url=url;
      }

       public Boolean call(){
           DownLoader downLoader=new DownLoader();
           downLoader.downLoad(url,name);
           System.out.println("下载了文件名:"+name);
           return true;
      }



       //主线程
       public static void main(String[] args) throws Exception{
           TestCallable t1=new TestCallable("https://img2022.cnblogs.com/blog/805318/202203/805318-20220311184026195-1803031373.png", "a1.png");
           TestCallable t2=new TestCallable("https://img2022.cnblogs.com/blog/805318/202203/805318-20220311184026195-1803031373.png", "a2.png");
           TestCallable t3=new TestCallable("https://img2022.cnblogs.com/blog/805318/202203/805318-20220311184026195-1803031373.png", "a3.png");

           //创建执行服务:
           ExecutorService ser= Executors.newFixedThreadPool(3);

           //提交执行:
           Future<Boolean> r1=ser.submit(t1);
           Future<Boolean> r2=ser.submit(t2);
           Future<Boolean> r3=ser.submit(t3);
           //获取结果:
           boolean flag1=r1.get();
           boolean flag2=r2.get();
           boolean flag3=r3.get();
           //关闭服务:
           ser.shutdownNow();


      }
    }

    //下载器
    class DownLoader{

       //下载方法
       public void downLoad(String url,String name){
           try {
               FileUtils.copyURLToFile(new URL(url), new File(name));
          } catch (IOException e) {
               e.printStackTrace();
          }
      }
    }

 

 

posted @   gzs1024  阅读(188)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示