精华内容
下载资源
问答
  • Future的核心思想是:一个方法的计算过程可能非常耗时,一直在原地等待方法返回,显然不明智。可以把该计算过程放到线程池去执行,并通过Future去控制方法的计算过程,在计算出结果后直接获取该结果。 ...

    Future

    future的核心思想是:一个方法的计算过程可能非常耗时,一直在原地等待方法返回,显然不明智。可以把该计算过程放到线程池去执行,并通过Future去控制方法的计算过程,在计算出结果后直接获取该结果。

    可以通俗的理解为"ajax版本的runnable",屁如:比如去吃早点时,点了包子和凉菜,包子需要等3分钟,凉菜只需1分钟,如果是串行的一个执行,在吃上早点的时候需要等待4分钟,但是因为你在等包子的时候,可以同时准备凉菜,所以在准备凉菜的过程中,可以同时准备包子,这样只需要等待3分钟。那Future这种模式就是后面这种执行模式。

    Future常用方法介绍

    Future保存异步计算的结果,可以在我们执行任务时去做其他工作,并提供了以下几个方法

    * cancel(boolean mayInterruptIfRunning):试图取消执行的任务,参数为true时直接中断正在执行的任务,否则直到当前任务执行完成,成功取消后返回true,否则返回false

    * isCancel():判断任务是否在正常执行完前被取消的,如果是则返回true

    * isDone():判断任务是否已完成

    * get():等待计算结果的返回,如果计算被取消了则抛出

    * get(long timeout,TimeUtil unit):设定计算结果的返回时间,如果在规定时间内没有返回计算结果则抛出TimeOutException

    Runnable与Callable不同点

    1. Runnable不返回任务执行结果,Callable可返回任务执行结果

    2. Callable在任务无法计算结果时抛出异常,而Runnable不能

    3. Runnable任务可直接由Thread的start方法或ExecutorService的submit方法去执行

     使用Future的好处

    1. 获取任务的结果,判断任务是否完成,中断任务

    1. Future的get方法很好的替代的了Thread.join或Thread,join(long millis)

    2. Future的get方法可以判断程序代码(任务)的执行是否超时

    Future图解

     

    v get() 返回任务计算结果

    package com.zhang.myjuc.a8.future;
    
    import java.util.concurrent.*;
    
    /**
     * FutureDemo:Future的基本使用
     * Callable<T>:返回结果并可能引发异常的任务。实现者定义了一个没有参数的方法call。
     * Callable接口与Runnable类似,因为它们都是为实例可能由另一个线程执行的类设计的。但是,Runnable不返回结果,也不能抛出检查过的异常。
     *
     * @author zhangxiaoxiang
     * @date 2020/08/26
     */
    public class FutureDemo {
        public static void main(String[] args) {
            //最新阿里规约,这里为了简介,但是不用线程池工厂(要使用带有ThreadFactory参数的ThreadPoolExecutor构造方法哦,
            // 这样你就可以方便的设置线程名字啦。)
            ThreadPoolExecutor executor = new ThreadPoolExecutor(10, 10, 
                    60L, TimeUnit.SECONDS, new LinkedBlockingQueue<>(10));
            Future<String> future = executor.submit(() -> "返回任务执行结果String类型:长草颜团子(lambda写法写法)");
            // Future<String> future = executor.submit(new CallableTask());
            try {
                //返回任务计算结果哈
                System.out.println(future.get());
            } catch (InterruptedException e) {
                e.printStackTrace();
            } catch (ExecutionException e) {
                e.printStackTrace();
            }finally {
                executor.shutdown();
            }
        }
    
        /**
         * 任务常规写法(lambda写法不利于初学时理解,这里添加一个常规写法)
         */
        static class CallableTask implements Callable<String>{
            @Override
            public String call() throws Exception {
                return "返回任务执行结果String类型:长草颜团子(非lambda写法写法)";
            }
        }
    
    }
    

    批量提交任务时,用List来批量接收结果   get(i)的使用

    package com.zhang.myjuc.a8.future;
    
    import java.util.ArrayList;
    import java.util.Random;
    import java.util.concurrent.*;
    
    /**
     * MultiFutures:批量提交任务时,用List来批量接收结果
     *
     * @author zhangxiaoxiang
     * @date 2020/08/26
     */
    public class MultiFutures {
        public static void main(String[] args) throws InterruptedException {
            ThreadPoolExecutor executor = new ThreadPoolExecutor(4, 4,
                    60L, TimeUnit.SECONDS, new LinkedBlockingQueue<>(20));
            ArrayList<Future> futures=new ArrayList<>();
            //20个线程执行注意上面线程池参数(最大线程池数量+队列排队容量>=20才行哈)
            for (int i = 0; i < 20; i++) {
                //JDK 8 lamdba写法
                Future<Integer> future = executor.submit(()->{
                    //模拟任务耗时
                    Thread.sleep(3000);
                    return new Random().nextInt();
                });
                //用List来批量接收结果
                futures.add(future);
            }
            // Thread.sleep(5000);
            for (int i = 0; i < 20; i++) {
                //返回列表中指定位置的元素 get(i)
                Future future = futures.get(i);
                try {
                    System.out.println(future.get());
                } catch (ExecutionException e) {
                    e.printStackTrace();
                }
            }
            executor.shutdown();
        }
    
    }
    

    Future 异常处理(如果任务完成,返回true。完成可能是由于正常终止、异常或取消——在所有这些情况下,此方法将返回true)

    package com.zhang.myjuc.a8.future;
    
    import java.util.concurrent.*;
    
    /**
     * FutureException:Future处理异常(如果任务完成,返回true。完成可能是由于正常终止、异常或取消——在所有这些情况下,此方法将返回true)
     * get方法过程中抛出异常,for循环为了演示抛出Exception的时机:并不是说一产生异常就抛出,直到我们get执行时,才会抛出。
     *
     * @author zhangxiaoxiang
     * @date 2020/08/26
     */
    public class FutureException {
        public static void main(String[] args) {
            ThreadPoolExecutor executor = new ThreadPoolExecutor(20, 20,
                    60L, TimeUnit.SECONDS, new LinkedBlockingQueue<>(20));
            Future<Integer> future = executor.submit(() -> {
                throw new IllegalArgumentException("Callable抛出异常");
            });
            for (int i = 0; i < 5; i++) {
                System.out.println(i);
                try {
                    Thread.sleep(500);
                    //如果任务完成,返回true。完成可能是由于正常终止、异常或取消——在所有这些情况下,此方法将返回true。
                    System.out.println("如果任务完成,返回true。完成可能是由于正常终止、异常或取消——在所有这些情况下," +
                            "此方法将返回true,本次结果是===>"+future.isDone());
                    future.get();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                    System.out.println("InterruptedException  异常");
                } catch (ExecutionException e) {
                    e.printStackTrace();
                    System.out.println("ExecutionException  异常");
                }
            }
        }
    
    }
    

     执行结果

     

     Future 演示超时 get(2000, TimeUnit.MILLISECONDS)

    package com.zhang.myjuc.a8.future;
    
    import java.util.concurrent.*;
    
    /**
     * FutureTimeout:演示get的超时方法,需要注意超时后处理,调用future.cancel()。演示cancel传入true和false的区别,
     * 代表是否中断正在执行的任务。
     *
     * @author zhangxiaoxiang
     * @date 2020/08/26
     */
    public class FutureTimeout {
        private static final Ad DEFAULT_AD = new Ad("无网络时候的默认广告");
        private static final ExecutorService exec = Executors.newFixedThreadPool(10);
        static class Ad {
            String name;
            public Ad(String name) {
                this.name = name;
            }
            @Override
            public String toString() {
                return "Ad{" +
                        "name='" + name + '\'' +
                        '}';
            }
        }
        static class FetchAdTask implements Callable<Ad> {
    
            @Override
            public Ad call() throws Exception {
                try {
                    Thread.sleep(3000);
                } catch (InterruptedException e) {
                    System.out.println("sleep期间被中断了");
                    return new Ad("被中断时候的默认广告");
                }
                return new Ad("旅游订票哪家强?找某程");
            }
        }
        public void printAd() {
            Future<Ad> f = exec.submit(new FetchAdTask());
            Ad ad;
            try {
                //如果有必要,等待计算完成的时间最多为给定的时间,然后检索其结果(如果可用)
                ad = f.get(2000, TimeUnit.MILLISECONDS);
            } catch (InterruptedException e) {
                ad = new Ad("被中断时候的默认广告");
            } catch (ExecutionException e) {
                ad = new Ad("异常时候的默认广告");
            } catch (TimeoutException e) {
                ad = new Ad("超时时候的默认广告");
                System.out.println("超时,未获取到广告");
                boolean cancel = f.cancel(true);
                System.out.println("cancel的结果:" + cancel);
            }
            exec.shutdown();
            System.out.println(ad);
        }
    
        public static void main(String[] args) {
            FutureTimeout timeout = new FutureTimeout();
            timeout.printAd();
        }
    }
    

    运行结果

    展开全文
  • 解决方法:原来使用搜狗浏览器,后来换一个浏览器使用head就可以了,我换的是谷歌浏览器

    解决方法:原来使用搜狗浏览器,后来换一个浏览器使用head就可以了,我换的是谷歌浏览器



    展开全文
  • Crawler:基于BeautifulSoup库+requests库实现爬取2018最新电影《后来的我们》热门短评 目录 输出结果 实现代码 输出结果 实现代码 # -*- coding: utf-8 -*- #Py之Crawler:利用BeautifulSoup库...

    Crawler:基于BeautifulSoup库+requests库实现爬取2018最新电影《后来的我们》热门短评

     

    目录

    输出结果

    实现代码


     

     

    输出结果

     

    实现代码

    # -*- coding: utf-8 -*-
    
    #Py之Crawler:利用BeautifulSoup库实现爬取2018最新电影《后来的我们》热门短评
    import time
    import requests
    import csv
    from bs4 import BeautifulSoup
    head = 'https://movie.douban.com/subject/'
    middle = '/comments?start='
    zr_tail = '&limit=20&sort=new_score&status=P&percent_type='
    names = []
    header = {
       'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0'
    }
    
    zr_urls = ['最热'] 
    def createUrls(): 
       for j in range(1, 34, 2): 
           name = names[j]
           #print(name)
           for i in range(0, 100, 20):
               zr_urls.append(head + str(name) + middle + str(i) + zr_tail) 
               #print(zr_urls)得到某个电影短评地址(默认最热排序),如https://movie.douban.com/subject/27063335/comments?start=0&limit=20&sort=new_score&status=P&percent_type=
    
    def readName(): 
       with open('爬取电影名称.txt', mode='r', encoding='utf-8') as f:
           for i in f.readlines():
               i = i.strip('\n')
               names.append(i)
               #print(names)  
    readName()
    createUrls()
    get_comments(zr_urls)  #传入zr_urls

    完整代码,后续一周内即将公布!

    相关文章:Py之PIL:不一样的PS之利用PIL库的img.paste方法实现合成刘若英导演电影《后来的我们》海报设计

     

     

     

    展开全文
  • 读材料专业的你后来都怎样了?

    万次阅读 2019-02-11 14:35:06
    结果后来刚加入公司,这哥们就转到加州总部去工作了,我陪谁呢? 面完第二天就给offer了,纠结了几天就接受了,当时的薪资跟菊厂差不多。这几年菊厂薪资大涨,现在的起薪已经被菊厂的40W完爆了,我司的人只能...

    作者:材料劝退活雷锋

    本科上交毕业近十年,直博毕业正好4年(读了5年半)。

    博士做的课题属于金属物理,业内的顶级期刊是PRL和Acta Mater。当时我在跟两个杂志的审稿人斗争七八个月之后,都被这两个杂志拒稿,降了一档,分别中了PRB Rapid Comm和Philo. Mag。觉得自己科研做得太鸡肋,比上不足比下有余,导师又不太给力,干脆找工作去吧。

    博士毕业确实不好找工作,远不如硕士好找。交大双选会上我把简历投一家电厂,据说年薪也有十几万,结果电厂的HR说他们只招本科和硕士,博士太浪费,连我的简历都不要……太伤心了。其实当时我找工作找得心灰意冷,电厂只要肯收我,我就去了。

    后来决定还是出国做博后吧,却又稀里糊涂地收到一个电话面试,让我去张江面试。这是什么公司?我简历都不记得投过。HR告诉我,我两个半月前在51job上投过。估计是我当时搜索关键词“材料科学”后海投吧。

    本来我找工作找得心灰意冷,已经决定去做博后了,都不想去面试的,最后鼓气勇气还是去了。

    面试很有意思,搞得跟学术答辩一样,组里居然大部分都是物理、光学、微电子和材料的硕士博士博后。上午先笔试,都是一些初中生奥数题+本科物理基础题。然后做全英文的pre,讲自己的科研内容。下面不时有人提问,总经理还不时抬杠挑刺,给面试者压力。还好我谈笑风生(本来就是来面着玩的)。

    当时我对半导体、光学一窍不通,因此对这面试根本不抱什么希望,根本就是毫无压力嘛。我甚至觉得和我一起面试的竞争对手(一个复旦半导体材料本硕)更适合这家公司(毕竟专业相近)。不过这家伙在笔试的时候老是用手机偷偷上网查答案,让我很鄙视他的行为。

    下午1对1面试。先过来一个中年大叔(招我的经理),问了我一堆物理问题,我答得很差。然后一个前额少发的哥们来面我:“会不会玩游戏?”后来面了几个人后,又来了一个前额少发的哥们,原谅我脸盲:“你不是刚面过我?”“……是嘛?认错了吧,刚才是A面的你吧。”“那他问我会不会游戏干啥?”“你总得会一样吧,不然你这人该多无聊。我星际的apm可是200多的……”

    然后这哥们自报家门,原来是一只英国玛丽女王毕业的材料博,在吐槽了材料做博后多没前途后,他力劝我加入:“这里材料毕业的很少,快来陪陪我。”结果我后来刚加入公司,这哥们就转到加州总部去工作了,我陪谁呢?

    面完第二天就给offer了,纠结了几天就接受了,当时的薪资跟菊厂差不多。这几年菊厂薪资大涨,现在的起薪已经被菊厂的40W完爆了,我司的人只能自我安慰:我们性价比高,工作强度没菊厂大,时薪比人家高。

    工作第一年老是去美帝浪,第二年就被分到台湾出差了,50%~60%的出差率,一直到现在(有出差补贴,算是赚点小钱)。总体来说工作强度是比很多公司低的,当然挑战也比较大,case做不出来时的压力是很大的。

    为啥我取名叫“材料劝退活雷锋”,因为我不光搞材料劝退,还做好事。在过去的一年,我从知乎内推了6个人来我司面试,基本都是材料专业的。有发两篇nature comm的科研大神,有一篇paper都没有的亚琛小硕,其中4人拿到了offer。

    展开全文
  • Py之PIL:不一样的PS之利用PIL库的img.paste方法实现合成刘若英导演电影《后来的我们》海报设计 目录 输出结果 核心代码 输出结果 素材 结果合成! 核心代码 from PIL import Image, ...
  • JMeter做压力测试教程及结果分析

    万次阅读 多人点赞 2019-02-15 16:55:52
    用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。 三、Java环境的安装与配置: (1)因为JMeter是使用JAVA写的,所以使用JMeter之前,先安装JAVA环境, oracle官网下载JDkht...
  • Py之Crawler:基于requests库+json库实现爬取刘若英2018导演电影《后来的我们》的插曲《再见》张震岳的几十万热评+词云:发现“再见”亦是再也不见 目录 输出结果 实现代码 输出结果 背景...
  • 刚开始一直以为是映射配的不对,就一个字段一个字段的校验,结果根本没有用,呵呵,后来就用排除法,把条件一个一个都去掉,最后发现有个state的字段条件去掉后就可以查询到结果,当时state字段条件设置的为0,发现把这个...
  • jsoup本地tomcat 可以表单提交抓取查询结果,上传到服务器上可以抓去到页面结果确实查询结果不同 已解决 本地抓去一个查询姓名的页面,可以得到结果。 但是传到服务器上可以抓取到查询页面结果。但是结果不同。 ...
  • 微信支付-支付结果通知接收

    万次阅读 多人点赞 2017-06-22 14:18:43
    微信支付-支付结果通知接收最近在做微信支付功能在微信成功后,微信通过异步方式返回支付结果是遇到了问题:参数接收不到。后来通过查阅资料才将问题解决,现在将解决方法分享一下。官方文档解释如上图所示:通过...
  • 从前有一个程序员,成天写代码,后来。。。

    万次阅读 多人点赞 2016-07-14 20:50:36
    每天你都有机会和很多人擦身而过,而你或者对他们一无所知,不过也许有...从前有一个程序员,成天写代码,后来,他屎了1.一门可以靠手艺混饭的专业 你好,非常荣幸能够步入改变世界的软件开发行业,接下来我们聊点正经
  • 准备执行gpedit.msc/secpol.msc,结果提示这个错误。网上搜索: 办法一 regsvr32 C:\Windows\system32\msxml3.dll中的DllRegisterServer成功” 无用。 办法二 无法应用。 第一步:打开运行对话框输入:mmc 第...
  • 昨天我QJ了一个空姐, 后来她说我JB很大 [ post]偶是医院实习生,昨天在值班时抢救了一个空姐,后来她说我进步很大 QJ=抢救 JB=进步 结果回复: 1.昨天我QJ楼主全家...JB工作了一天好痛苦... QJ=请教 JB=加班 2....
  • 最近在看java,安装配置好...后来发现是我的main函数拼写错了,其实造成这样结果的原因可能如下: 有可能main函数拼写错了,写成mian; 主函数是不是忘写string[] args; 忘记加static修饰。 所以,你中招了吗? ...
  • 在使用SQL时遇到了只显示消息没有结果的问题,网上查询了方法也没有用,后来决定自己动手解决,最终发现问题不是出在表格结果是否放弃,而是出现在最大行数上, 解决方法是: 一 打开查询选项: 看看显示出来...
  • 结果做为开发的基础和终极目标,全栈开发者的完备性解决方案特别给力,必要情况下,在完备的基础上,进行临时折衷可以让开发过程更加迅捷,结果却不会打折扣
  • 今天遇到了个问题 ...后来加入线程锁,现象已经存在 然后使用debug来调试,最后锁定查询solr库这个地方 发现根本就是查询的结果就是这个样子. 这里就不能使用默认的score来进行排序了. 选取一个能够
  • 今天在使用SQL语句做查询任务的时候发现,在数据库中可以直接执行的语句,放在程序中结果却是None,于是乎,就实践了一下,下面是具体的实践。 #!usr/bin/env python # encoding:utf-8 ''' __Author__:沂水寒城 ...
  • MySQL中为查询结果赋值

    千次阅读 2018-01-17 15:32:08
    今天改BUG的时候无意中看到一个select查询语句,从见过这种写法,不知道具体代表什么意思。 后来询问了一下我们老大,select 'AAA' 字段Z from table_Z where id = XXX;代表的意思是,为查询出来的字段Z...
  • sql 自定义搜索结果列名自定义

    千次阅读 2015-12-08 21:06:48
    表 本来: 查询   后来查询
  • Postman没有返回结果

    千次阅读 2018-02-13 14:26:45
    接触过的小伙伴,赶快去了解吧,先把下载链接奉上!想要了解如何使用的请参考简书的这篇介绍,写的挺详尽的!我今天要说的是在使用过程遇到的一个问题:Postman不返回任何结果! 起初我使用的Postman是直接拷贝...
  • 正在进行的项目中有个网络模块,需要在上位机将数据包加密,然后在设备端将数据包解密。...而且该模块嵌入到其它大的功能模块,后来将加密、解密模块独立出来测试。当定位到解密这个点上,都已经过了大半天了。
  • sqlite 取得结果集行号的方法

    万次阅读 2016-02-18 13:33:38
    这几天遇到了一个问题,使用sqlite怎样取得结果集的行号?...后来终于在一个英文网站上找到了完美解决问题方法,分享出来,希望广大中国网友通过中文也能检索到这个方法。 【问题描述】 有这样一个sqlite databa
  • 后来我用dwi的文件(包含四维的.nii.gz、bvec、bval文件),用上面的流程发现中间有个文件生成不了,于是又找了别的方法才搞定。不过结果都是一样的,反正就是生成FA嘛。 1.处理dcm格式文件 格式转换: dcm2nii *....
  • 不知道什么原因导致dbeaver不显示查询的结果,卸载后重新安装还是不行,后来卸载后,把/Users/用户/Library/DBeaverData删除,再重新安装,就可以了。记录一下。 ...
  • 今天重新安装了新版的Android Studio,配置的什么的没有继承以前的,就重新配置插件,却发现Android Studio 的件市场搜不出结果,网络也问题,浏览器也可以直接访问https://plugins.jetbrains.com/,后来用下面的...
  • 最近在使用eclipse遇到了问题,程序无论怎么运行都是之前修改前的程序结果,如下面所示: package test; public class test { public static void main(String[] args) { // TODO Auto-generated method stub...
  • 在网上看了好多教程但是都没有解决我的Tortoisegit汉化 后来我看了看Tortoisegit的版本号和我的汉化包的版本号不一致,后来我又卸载了Tortoisegit重新下载了最新的汉化包和Tortoisegit,然后已下载就成功了,在这记下....
  • 之前都可以直接编辑select查询结果的数据。可是有一个自己创建的表,怎么都无法编辑,编辑相关的+-都是灰色的。后来比较了一下可以编辑的表和不能编辑的表。发现表一定要有主键才能编辑。
  • JPA自定义对象接收查询结果

    千次阅读 2018-09-19 17:12:07
    最近使用JPA的时候,碰到需要自定义查询结果集的...逼得办法去了官网看看文档,再没有就放弃了,时间看源码。最终找到我想要的结果了。 例如,传统的JPA接口实现如下所示: class Person { @Id UUID id; ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 522,221
精华内容 208,888
关键字:

后来没结果