[pravega-013] pravega源码分析--Controller子项目--guava concurrency的service框架和demo

1. pravega广泛使用guava concurrent service。在此,对guava进行分析和demo解释。

2.项目和参考文档

项目官网 https://github.com/google/guava

API文档 https://google.github.io/guava/releases/snapshot-jre/api/docs/

guava的主要参考文档  https://github.com/google/guava/wiki  和  http://code.google.com/p/guava-libraries/wiki/GuavaExplained

中文介绍文档 http://ifeve.com/google-guava-serviceexplained/ 和 https://blog.csdn.net/Black_Lands/article/details/64440303

3. 三个更远一点的参考文档

Concurrency in Practice  http://jcip.net/

书《effective java》

书《cocurrnecy in paractice》

4. AbstractExecutionThreadService的示例项目

4.1 AbstractExecutionThreadService的父实现了Service接口。熟悉本例之后,其他子类以此类推。

4.2 项目目录结构

├── build.gradle
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── settings.gradle
└── src
    ├── main
    │   ├── java
    │   │   ├── Main.java
    │   │   └── MainThread.java
    │   └── resources
    └── test
        ├── java
        └── resources
 

4.3 build.gradle文件内容

group 'com.brian.demo.guava'
version '1.0-SNAPSHOT'

apply plugin: 'java'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    compile 'com.google.guava:guava:27.0.1-jre'
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

4.4 Main.java文件内容

import com.google.common.util.concurrent.Service;

public class Main {
    public static void main(String[] args){
        System.out.println("Hi,guava");
        MainThread mt = new MainThread();
        Service mtS = mt.startAsync();
        System.out.println(mtS.state());
        mt.awaitTerminated();
        System.out.println("MainThread runs over");
    }
}

4.5 MainThread.java文件内容

import com.google.common.util.concurrent.AbstractExecutionThreadService;

public class MainThread extends AbstractExecutionThreadService{

    private Integer times = 0;

    //第一步,只实现run函数,然后运行,观察效果
    @Override
    protected void run() throws Exception {
        while (isRunning()){
            System.out.println("MainThread is running...");
            Thread.sleep(1000);
            this.times+=1;
            if (this.times >= 3){
                System.out.println("stopAsync");
                this.stopAsync();
            }
        }
    }

    //第二步,实现startUp函数,然后运行,观察效果。
    @Override
    protected void startUp() throws Exception {
        super.startUp();
        System.out.println("starUp func run,do something");
    }

    //第三步,实现triggerShutdown函数,然后运行,观察效果。
    @Override
    protected void triggerShutdown() {
        super.triggerShutdown();
        System.out.println("triggerShutdown func run, do something");
    }

    //第四步,实现shutDown函数,然后运行,观察效果。
    @Override
    protected void shutDown() throws Exception {
        super.shutDown();
        System.out.println("shutdown func run, do something");
    }
}

4.6 运行结果

/home/brian/usr/jdk1.8.0_111/bin/java -javaagent:/home/brian/usr/idea-IC-172.4343.14/lib/idea_rt.jar=42869:/home/brian/usr/idea-IC-172.4343.14/bin -Dfile.encoding=UTF-8 -classpath /home/brian/usr/jdk1.8.0_111/jre/lib/charsets.jar:/home/brian/usr/jdk1.8.0_111/jre/lib/deploy.jar:/home/brian/usr/jdk1.8.0_111/jre/lib/ext/cldrdata.jar:/home/brian/usr/jdk1.8.0_111/jre/lib/ext/dnsns.jar:/home/brian/usr/jdk1.8.0_111/jre/lib/ext/jaccess.jar:/home/brian/usr/jdk1.8.0_111/jre/lib/ext/jfxrt.jar:/home/brian/usr/jdk1.8.0_111/jre/lib/ext/localedata.jar:/home/brian/usr/jdk1.8.0_111/jre/lib/ext/nashorn.jar:/home/brian/usr/jdk1.8.0_111/jre/lib/ext/sunec.jar:/home/brian/usr/jdk1.8.0_111/jre/lib/ext/sunjce_provider.jar:/home/brian/usr/jdk1.8.0_111/jre/lib/ext/sunpkcs11.jar:/home/brian/usr/jdk1.8.0_111/jre/lib/ext/zipfs.jar:/home/brian/usr/jdk1.8.0_111/jre/lib/javaws.jar:/home/brian/usr/jdk1.8.0_111/jre/lib/jce.jar:/home/brian/usr/jdk1.8.0_111/jre/lib/jfr.jar:/home/brian/usr/jdk1.8.0_111/jre/lib/jfxswt.jar:/home/brian/usr/jdk1.8.0_111/jre/lib/jsse.jar:/home/brian/usr/jdk1.8.0_111/jre/lib/management-agent.jar:/home/brian/usr/jdk1.8.0_111/jre/lib/plugin.jar:/home/brian/usr/jdk1.8.0_111/jre/lib/resources.jar:/home/brian/usr/jdk1.8.0_111/jre/lib/rt.jar:/home/brian/git-home/github/HiGuava/out/production/classes:/home/brian/.gradle/caches/modules-2/files-2.1/com.google.guava/guava/27.0.1-jre/bd41a290787b5301e63929676d792c507bbc00ae/guava-27.0.1-jre.jar:/home/brian/.gradle/caches/modules-2/files-2.1/com.google.guava/failureaccess/1.0.1/1dcf1de382a0bf95a3d8b0849546c88bac1292c9/failureaccess-1.0.1.jar:/home/brian/.gradle/caches/modules-2/files-2.1/com.google.guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/b421526c5f297295adef1c886e5246c39d4ac629/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar:/home/brian/.gradle/caches/modules-2/files-2.1/com.google.code.findbugs/jsr305/3.0.2/25ea2e8b0c338a877313bd4672d3fe056ea78f0d/jsr305-3.0.2.jar:/home/brian/.gradle/caches/modules-2/files-2.1/org.checkerframework/checker-qual/2.5.2/cea74543d5904a30861a61b4643a5f2bb372efc4/checker-qual-2.5.2.jar:/home/brian/.gradle/caches/modules-2/files-2.1/com.google.errorprone/error_prone_annotations/2.2.0/88e3c593e9b3586e1c6177f89267da6fc6986f0c/error_prone_annotations-2.2.0.jar:/home/brian/.gradle/caches/modules-2/files-2.1/com.google.j2objc/j2objc-annotations/1.1/ed28ded51a8b1c6b112568def5f4b455e6809019/j2objc-annotations-1.1.jar:/home/brian/.gradle/caches/modules-2/files-2.1/org.codehaus.mojo/animal-sniffer-annotations/1.17/f97ce6decaea32b36101e37979f8b647f00681fb/animal-sniffer-annotations-1.17.jar Main
Hi,guava
STARTING
starUp func run,do something
MainThread is running...
MainThread is running...
MainThread is running...
stopAsync
triggerShutdown func run, do something
shutdown func run, do something
MainThread runs over

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值