精华内容
下载资源
问答
  • 线程监听
    2021-03-06 14:53:45

    背景:消息队列中有非常多的消息需要处理,并且监听器onMessage()方法中的业务逻辑也相对比较复杂,为了加快队列消息的读取、处理速度。可以通过加快读取速度和加快处理速度来考虑。因此从这两个方面都使用多线程来处理。对于消息处理的业务处理逻辑用线程池来做。对于加快消息监听读取速度可以使用1.使用多个监听器监听一个队列;2.使用一个监听器开启多线程监听。

    对于上面提到的方法2使用一个监听器开启多线程监听,借助spring自带的DefaultMessageListenerContainer可以很方便实现这一功能。

    class="org.springframework.jms.listener.DefaultMessageListenerContainer">

    对于开启几个线程可以自行根据需求和性能进行考虑。

    监听器打印输出当前线程:

    public void onMessage(Message message) {

    System.out.println("在onMessage中线程ID是"+Thread.currentThread());

    输出结果:

    在onMessage中线程ID是Thread[testListenerContainer1-3,5,main]

    在onMessage中线程ID是Thread[testListenerContainer1-4,5,main]

    在onMessage中线程ID是Thread[testListenerContainer1-6,5,main]

    更多相关内容
  • 下面小编就为大家带来一篇Java线程监听,意外退出线程后自动重启的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • C++ 多线程监听代码

    2020-10-12 10:49:33
    线程监听代码,不同的线程来监听主线程是否发生变换,如果变换,根据相应的参数调用不同的线程执行相关代码
  • C# 线程监听

    千次阅读 2020-07-01 19:07:23
    线程循环监听方法 记录一下 private readonly List<Thread> threads = new List<Thread>(); /// <summary> /// 线程循环监听 /// </summary> private void ClearPutLogMes() { //...

    线程循环监听方法

    记录一下

     private readonly List<Thread> threads = new List<Thread>();
            /// <summary>
            /// 线程循环监听
            /// </summary>
            private void ClearPutLogMes()
            {
                //if (times <= 0)
                //{
                //    times++;
                //    return;
                //}
                foreach (var thread in threads)
                {
                    thread.Abort();
                }
                threads.Clear();
                var t = new Thread(() =>
                {
                    while (true)
                    {
                        Thread.Sleep(6000);
                        Invoke(new Action(() =>
                        {
                           //需要监听的逻辑
                        }));
                        Thread.Sleep(300000);
                    }
                })
                {
                    IsBackground = true,
                    Name = "Name" + Guid.NewGuid().ToString("N")
                };
                t.Start();
                threads.Add(t);
            }

     

    展开全文
  • 使用kotlin编写,通过判断权限开启录音,通过分贝判断下步工作,线程监听msg实现任务切换,里面有个定时器可参考
  • 由于springboot中rabbitmq默认是单线程监听,所以需要我们加以配置。 二、方案 配置rabbitmq多线程监听,提供SimpleRabbitListenerContainerFactory类的bean,为数据量大的队列指定这个bean。 设置多线程批量处理。...

    一、需求

    使用rabbitmq转发大量消息,提高效率。由于springboot中rabbitmq默认是单线程监听,所以需要我们加以配置。

    二、方案

    配置rabbitmq多线程监听,提供SimpleRabbitListenerContainerFactory类的bean,为数据量大的队列指定这个bean。
    设置多线程批量处理。在任意配置类中,提供这个bean。(注意配置类中的Listener会覆盖配置文件中的配置)

        // 配置批量监听容器
        @Bean("batchQueueRabbitListenerContainerFactory")
        public SimpleRabbitListenerContainerFactory batchQueueRabbitListenerContainerFactory(ConnectionFactory connectionFactory) {
            SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
            factory.setConnectionFactory(connectionFactory);
            //设置批量
            factory.setBatchListener(true);
            factory.setConsumerBatchEnabled(true);//设置BatchMessageListener生效
            factory.setBatchSize(1000);//设置监听器一次批量处理的消息数量
            factory.setConcurrentConsumers(10);  //设置线程数
            factory.setMaxConcurrentConsumers(10); //最大线程数
            return factory;
        }
    

    为队列指定这个bean

        // 创建消费者,比较两者时间
        @RabbitListener(queues = "xiaomi",containerFactory = "batchQueueRabbitListenerContainerFactory")
        public void xiaomiHandler(List<Message> messages) throws IOException, ClassNotFoundException {
            log.info("xiaomiHandler>>>>>" + messages.size());
        }
    

    三、测试

    在这里插入图片描述
    确实是10个线程并发监听。

    展开全文
  • java创建线程监听端口,创建线程处理连接
  • 1、需要异步线程执行,而且需要获取到线程执行返回的结果。 2、如果执行过程异常,可以按照自定义方式消费异常信息。 如果只是单纯的使用Callable可以实现,本文提供更加优雅的工具类。 Maven依赖 <...

    目录

    前言

    Maven依赖

    代码

    总结


    前言

    工作中是否遇到这样的场景?

    1、需要异步线程执行,而且需要获取到线程执行返回的结果。

    2、如果执行过程异常,可以按照自定义方式消费异常信息。

    如果只是单纯的使用Callable可以实现,本文提供更加优雅的工具类

    Maven依赖

            <dependency>
                <groupId>cn.hutool</groupId>
                <artifactId>hutool-all</artifactId>
                <version>5.7.15</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
            <dependency>
                <groupId>com.google.guava</groupId>
                <artifactId>guava</artifactId>
                <version>31.0.1-jre</version>
            </dependency>

    代码

    不废话,上代码。

    package com.huyi.csdn.tools;
    
    import cn.hutool.core.thread.ThreadUtil;
    import com.google.common.util.concurrent.*;
    import org.checkerframework.checker.nullness.qual.Nullable;
    import org.springframework.scheduling.concurrent.CustomizableThreadFactory;
    
    import java.util.concurrent.Callable;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import java.util.concurrent.TimeUnit;
    import java.util.function.Consumer;
    
    /**
     * @Program: csdn @ClassName: AsyncListenUtil @Author: huyi @Date: 2021-10-30 11:48 @Description:
     * 异步线程监听回调工具 @Version: V1.0
     */
    public class AsyncListenUtil {
      public static final ExecutorService executorService =
          Executors.newFixedThreadPool(10, new CustomizableThreadFactory("LISTEN-"));
      public static final ListeningExecutorService listeningExecutorService =
          MoreExecutors.listeningDecorator(executorService);
    
      /**
       * 提交任务
       *
       * @param work Callable需要线程执行的内容
       * @param consumer 结果消费
       * @param errorConsumer 异常消费
       * @param <T> 泛型
       */
      public static <T> void submit(
          Callable<T> work, Consumer<T> consumer, Consumer<Throwable> errorConsumer) {
        ListenableFuture<T> listenableFuture = listeningExecutorService.submit(work);
        Futures.addCallback(
            listenableFuture,
            new FutureCallback<T>() {
              @Override
              public void onSuccess(@Nullable T s) {
                consumer.accept(s);
              }
    
              @Override
              public void onFailure(Throwable throwable) {
                errorConsumer.accept(throwable);
              }
            },
            listeningExecutorService);
      }
    
      /** 摧毁线程池 */
      public static void destroy() {
        System.out.println("摧毁线程池");
        executorService.shutdown();
      }
    
      public static void main(String[] args) {
        AsyncListenUtil.submit(
            () -> {
              // todo 需要执行的内容
              ThreadUtil.sleep(10, TimeUnit.SECONDS);
              return "I finished my work";
            },
            result -> {
              // todo 结果处理
              System.out.println("listen get :" + result);
            },
            throwable -> {
              // todo 异常处理
              System.out.println(throwable.getMessage());
            });
        ThreadUtil.sleep(20, TimeUnit.SECONDS);
        destroy();
      }
    }
    

    代码说明

    1、提交方法主要参数有,需要执行的Callable,结果的Consumer,异常的Consumer。其中Callable调整成Supplier也是没什么问题。

    2、提供摧毁线程池方法。

    执行结果

    OK没什么问题。

    总结

    追求优雅是个好习惯。

    如果本工具对你有用的话,请点个赞吧,这对作者很重要,谢谢。

     

     

    展开全文
  • 使用手动创建线程的方式,对应的一个线程监听一个频道或者数据类型,而对应new 出来的线程对象放在了map中,根据key为频道名称或数据类型名称,value为线程对象。 此方式为了随时可以手动启动关闭监听对应的频道及...
  • CountDownLatch类位于java.util.concurrent包下,使用CountDownLatch可以实现一个类似计数器的功能。 // 构造参数为计数总量 final CountDownLatch latch = new ...// 在需要监听其他线程运行状态的线程中使...
  • 线程监听的串口类

    2012-09-05 09:30:04
    本代码是一个串口类,具体包含了串口的初始化及配置,以及多线程监听,封装的比较好,比较实用于刚开始学串口的朋友
  • //通过开启后台线程监听控制台输入来实现按任意键退出 //也可以自行修改成其他键 vector<thread> threads; threads.push_back(thread([](){ if(getchar()) { exit(0); } }));
  • 摘要: 观察者模式:定义... 观察者模式在JDK中有现成的实现,java.util.Obserable,如何进行监听线程,请看例子:被监听线程类:package cn.std.test; import java.util.Observable; import cn.std.util.DateUt...
  • 比如我的主线程是持续执行的,同时有一个thread1和thread2分别监听两个不同的信号 当thread1接受到信号时执行对应程序,但同时暂停主线程的执行 一旦thread1程序结束,主线程继续运行,两个子线程也继续监听
  • Spring+weblogic JMS 多线程监听消息队列

    千次阅读 2018-03-27 11:26:28
    项目背景:Weblogic JMS消息队列中有非常多的消息需要处理,并且监听器onMessage()方法中的业务逻辑也相对比较复杂,为了加快队列消息的读取、处理速度。...2.使用一个监听器开启多线程监听。对于上面提...
  • C# Winform 多线程监听IC卡读卡器

    千次阅读 2018-06-21 10:23:00
    本文原创,转载请注明出处! 我们使用IC读卡器时,一般可分为手动读卡和...其实现的逻辑大家应该都知道,就是通过开一个多线程来轮训IC卡读卡的结果,下面就详细讲一下具体开发过程。(注:本文的读卡器型号为URF-...
  • //开启线程监听 Thread th = new Thread(ListenFunc); th.IsBackground = true; th.Start(Server); } } #endregion #region 监听 /// /// 监听 /// /// <param name="objListen"></param> public ...
  • 例如测试员输入保存N条用例,这些用例都会在cmd里面运行,每条结果都会返回pass或者fail, 我怎么监控N条用例完成后,我的进度条也同时完成?每条用例运行时间都不一样,求 各位大神指导~
  • 展开全部不是通过线程实现的,它是通过一种注册--通知机制实现的。在java的设计模式中,有一e5a48de588b662616964757a686964616f31333339666165种模式叫:观察者模式,和这个类似。举个例子,本例子是一个简单的监听...
  • 里面有详细的注释说明,主要实现DWR推送、线程监听、事件监听、主动推送。。写得不好,请见谅。。然后有个特别需要注意的,部署好项目以后,访问的方式是:http://localhost:9999/MonitorSystem/indexTo,特别注意...
  • 1,多线程的创建和使用 int max=500; ExecutorService fixedThreadPool = Executors.newFixedThreadPool(max); for (int i = 0; i < max; i++) { final int index = i; fixedThreadPool.execute(new Runnable...
  • 线程2没有释放锁,线程1获取对象锁时,线程1就会进入到EntryList阻塞队列里面,同时线程1的状态变为BLOCKED阻塞状态。 当锁释放了之后,其它在EntryList队列里面的线程就会竞争。 当线程获取了锁,但是...
  • } } 可以看出确实实现了效果,但是这种方法太low了,缺点如下: (1)主线程循环判断标志位是浪费CPU的表现 (2)如果有另外的线程也需要判断,那也得在线程中写一个死循环,代码太无设计思想可言 ,看到这里也许有...
  • 第一次这么用户,请原谅任何...在我有一个基本的程序,可以连续监听串行端口上的消息,然后可以打印/保存/处理/等等,这很好用。基本上是这样的:import serialdef main():usb = serial.Serial('/dev/cu.usbserial-A...
  • 最近项目中创建线程较多,有时候会存在线程死掉的情况,所以写了一个监听线程监听线程的存活状态 public class ThreadMonitor implements Runnable { private static final Logger log = LoggerFactory....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 353,868
精华内容 141,547
关键字:

线程监听