引入github关注者Util

/ 默认分类 / 0 条评论 / 2424浏览

githubApi

url:https://github.com/s-lion-h/githubApiTools/releases


release version 0.0.1->0.0.3

此为初始版本 version0.0.1能根据github api请求自己关注的人列表,指定user的仓库,自己关注人的仓库列表 不足之处:每小时只能请求60次api,但是一个普通的user10个关注,就会产生11个调用,显然api请求次数不够


release version0.0.2 添加了token支持 不足:多次访问时token会被重复声明,导致原token会被append到最后


release version0.0.3 修复了token重复append问题 不足:following的人数过多时,由于原有的顺序执行,请求完一个user-following再请求下一个user-following,会导致单个页面请求时间高达7秒 期望:following的仓库请求方式更改为多线程方式 slionh.com/upload/2018/07/3e8hjksr0ih4hpbnljip5s940q.jpg

2018年7月13日---Thinks

git的api请求需要尽可能地块,而请求不需要加锁,所以应该保证每个线程请求且仅请求关注列表的单个人的单次

api请求需要有返回值,并且同时需要保证多并发,关注列表保证同步

JAVA多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没有返回值,只有最后一种是带返回值的

参考http://www.cnblogs.com/yezhenhan/archive/2012/01/09/2317636.html

创建线程类

package com.slionh.githubApi.parse;

import com.slionh.githubApi.po.Repository;

import java.util.List;
import java.util.concurrent.Callable;

/*
 * Create by s lion h on 2018/7/13
 */
public class GitThread implements Callable<Object> {
    private String taskNum;
    private String username;
    private String token="";

    public GitThread(String taskNum) {
        this.taskNum = taskNum;
    }

    public GitThread(String taskNum, String username) {
        this.taskNum = taskNum;
        this.username = username;
    }

    public GitThread(String taskNum, String username, String token) {
        this.taskNum = taskNum;
        this.username = username;
        this.token = token;
    }

    public Object call() throws Exception {
        GitUtil gitUtil=new GitUtil();
    //        List<Repository> repositories= GitUtil.getRepositoryLists(username,token);
        List<Repository> repositories= gitUtil.getRepositoryLists(username,token);
        return  repositories;
    }
    }

两种资源分配 1.向thread的构造方法传递参数,即在线程外分配资源

2.由thread主动向外部排队获取资源,此种方式需要为thread方法添加synchronized关键字,或者为资源加锁

release version 0.1.0

更新了following-user-repositories的多线程请求方式 请求时间从8秒下降到了2.8秒

待优化:如何从8秒下降到2.8秒在下降到1秒以内

thinks 将已请求过的user/following中的user添加到redis高速缓存中 下次请求优先在redis中检索,整体而言,俗称的二八原则吧 20%的人收获了80%的请求量,甚至更夸张

emmm,乖乖学习redis。。