千家信息网

Java guava monitor监视器线程怎么用

发表于:2024-10-24 作者:千家信息网编辑
千家信息网最后更新 2024年10月24日,小编给大家分享一下Java guava monitor监视器线程怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Mav
千家信息网最后更新 2024年10月24日Java guava monitor监视器线程怎么用

小编给大家分享一下Java guava monitor监视器线程怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

Maven依赖

            com.google.guava            guava            31.0.1-jre        

代码

不废话上代码。

package com.huyi.csdn.tools; import cn.hutool.core.thread.ThreadUtil;import com.google.common.util.concurrent.Monitor;import org.springframework.scheduling.concurrent.CustomizableThreadFactory; import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.function.Function; /** * @Program: csdn @ClassName: MonitorRunner @Author: huyi @Date: 2021-10-30 15:22 @Description: * 监视器Runner @Version: V1.0 */public class MonitorRunner implements Runnable {  private T param;  private Function condition;  private Runnable runnable;  private Monitor monitor;   /**   * 构造函数   *   * @param param 判断参数   * @param condition 判定函数   * @param runnable 执行内容   */  public MonitorRunner(T param, Function condition, Runnable runnable) {    this.param = param;    this.condition = condition;    this.runnable = runnable;    monitor = new Monitor();  }   @Override  public void run() {    System.out.println("线程开始");    Monitor.Guard guard =        new Monitor.Guard(monitor) {          @Override          public boolean isSatisfied() {            return condition.apply(param);          }        };     while (true) {      if (monitor.enterIf(guard)) {        try {          runnable.run();        } finally {          monitor.leave();          break;        }      } else {        continue;      }    }  }   public T getParam() {    return param;  }   public MonitorRunner setParam(T param) {    this.param = param;    return this;  }   public static void main(String[] args) {    ExecutorService executorService =        Executors.newFixedThreadPool(10, new CustomizableThreadFactory("MONITOR-"));    MonitorRunner monitorRunner =        new MonitorRunner<>(            0,            x -> x > 10,            () -> {              // todo 线程需要执行的内容              System.out.println("今天天气真好");            });    executorService.submit(monitorRunner);    while (monitorRunner.getParam() <= 10) {      monitorRunner.setParam(monitorRunner.getParam() + 1);      ThreadUtil.sleep(1000L);      System.out.println("当前Param的值:" + monitorRunner.getParam());    }    ThreadUtil.sleep(5000L);    executorService.shutdown();  }}

代码说明

主要在构造对象的时候需要传递泛型的校验对象,以及断言和需要执行的Runable。

执行结果

以上是"Java guava monitor监视器线程怎么用"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

0