pc3121278 2022-06-30 10:39 采纳率: 0%
浏览 743
已结题

用java实现高速度处理获取的字符串String

请教 想要做一个抢先执行的工具!用java来实现;实现原理,一端源源不断的接收字符串String数据(网络服务器读取,预计1ms接收一条,每秒钟上千条),然后要求快速的对这些数据筛选和做出反应(由于每一秒接收的数据非常多,且要求对符合要求的数据处理的足够快,所以想要采用一开始固定启动多条线程并行读取和处理这些数据,如果每一条数据都创建一个线程分析这样太消耗资源和影响速度),请问java可以用什么方式来实现呢? 分析过的数据不需要存储

  • 写回答

21条回答 默认 最新

  • Counter-Strike大牛 Java领域新星创作者 2022-07-06 09:17
    关注
    获得5.00元问题酬金

    可以用线程池实现灵活的线程分配。

    ExecutorService executorService = Executors.newCachedThreadPool();
            executorService.execute(…);
    

    或者

    ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(…);
            threadPoolExecutor.execute(…);
    
    评论 编辑记录
  • De-Chang Wang 2022-06-30 11:21
    关注
    获得2.00元问题酬金

    如果你是因为字符串处理速度不够快而想用多线程的话,恐怕难以达到你的预期了。多线程无法提高硬件运行速度,只能更多地挖掘硬件和能力而已。

    评论
  • 笑看风云路 大数据领域优质创作者 2022-06-30 11:26
    关注
    获得2.00元问题酬金

    利用线程池的方式就可以实现多线程循环处理接收的任务!

    评论 编辑记录
  • SummerGao. Erlang/OTP领域新星创作者 2022-06-30 11:34
    关注
    获得2.00元问题酬金

    通过OkHTTP转发一下,转发到不同controller中处理数据。

    评论 编辑记录
  • bug_keng 2022-06-30 13:32
    关注
    获得1.00元问题酬金

    用消息中间件会不会好点

    评论
  • MrTangLY 2022-06-30 16:07
    关注

    生产者线程推送字符串到消息队列,然后多个消费线程监听处理数据

    评论
  • 为了我的架构师 2022-06-30 23:51
    关注
    获得3.00元问题酬金

    用消息中间件

    评论
  • 原来我不知道啊 2022-07-01 00:19
    关注
    获得1.00元问题酬金

    这个属于生产者/消费者问题。生产者产生一条数据后,可以:
    1、生成一个处理任务,交给消费线程池处理,消费者使用一个线程池;
    2、或者将消息放到一个内存队列中,然后启动多个消费者线程,都从这个队列中获取消息并处理;
    3、再或者就是将消息放到消息中间件,如kafka、rabbitmq等,然后启动多个消费者程序来处理

    评论
  • 一起随缘 2022-07-01 00:59
    关注
    获得2.00元问题酬金

    首先最好使用池化技术,初始化时给线程池设置一批线程数,这样就不用频繁创建线程消耗系统性能,其次,处理的字符串是否入库,如果是,尽量也使用多线程批量处理,同时入库的表尽量不要设置太多索引,因为影响读写操作效率

    评论
  • 投三分的金闪闪 2022-07-01 03:33
    关注
    获得2.00元问题酬金

    用消息队列,使用RabbitMQ或者Kafka,可靠性要求更高用RabbitMQ,性能要求更高选Kafka。
    消息队列是异步的,所以你接收字符串和处理字符串可以分开,然后按你选的消息队列模型去处理接收到的字符串就可以了。

    评论
  • 云下牧羊人 2022-07-01 03:51
    关注
    获得2.00元问题酬金

    可以像下图这样创建一个线程池。

    在这里插入图片描述

    如果一直高速处理,没有波峰波谷的话,可以把核心线程数设置的大一些(一般是你的电脑内核数+1,具体还得看压测情况),并且核心线程数可以等于最大线程数,这样就省去了线程创建和销毁的开销。

    图中等待队列用的是LinkedBlockingDeque(阻塞队列,并且没有设置最大值),看你的需求,如果要是考虑有耗时操作,并且内存可能会溢出的话,可以设置队列最大值,如果所有的线程都在运行任务,阻塞队列也满了(设置了最大值的情况下),就会走拒绝策略,也就是图中的new ThreadPoolExecutor.AbortPolicy(),AbortPolicy是指的丢弃任务。

    按照你的需求设置拒绝策略。

    • ThreadPoolExecutor.AbortPolicy:丢弃任务并抛出RejectedExecutionException异常。 默认策略
    • ThreadPoolExecutor.DiscardPolicy:也是丢弃任务,但是不抛出异常。
    • ThreadPoolExecutor.DiscardOldestPolicy:丢弃队列最前面的任务,然后重新尝试执行任务(重复此过程)
    • ThreadPoolExecutor.CallerRunsPolicy:由调用线程处理该任务
    评论 编辑记录
  • 微笑精灵 2022-07-01 04:46
    关注
    获得3.00元问题酬金

    我都不知道你具体要做啥,我们也只能给你那些通用的回答说法:
    负载均衡,线程池,如果处理字符串重复率高还可以缓存,更换硬件,修改代码提高效率

    评论
  • blackoon88 2022-07-01 08:06
    关注
    获得2.00元问题酬金
    接收数据,采用线程池技术,多线程接受处理数据;
    如果涉及到对数据进行线程安全地简单计算,可以使用LongAdder或者LongAccumulator进行处理单台处理;
    分布式部署的话,可以引入分布式存储,一般采用Redis存储。
    
    评论 编辑记录
  • 皮蛋不吃粥 2022-07-01 08:49
    关注
    获得3.00元问题酬金

    1.如果是单纯就用Java不考虑中间件,就是Netty接收,多线程+线程池处理接收后的数据。
    2.考虑使用中间件,使用消息队列,追求吞吐量就Kafka,或者RocketMQ。中间件的部署使用集群方式,提高硬件配置

    评论
  • qq_40751218 2022-07-01 09:17
    关注

    分三步吧
    1、配置需要过滤的词字典
    2、对接收的字符串采用分词算法
    3、然后再消费匹配的字符串
    其中1、2可以参考ElasticSearch的analysis-ik分词器实现,第三点的话跟业务有关了,
    我们主要的是优化1,2点,可以用C语言把analysis-ik实现提供给JAVA调用,主要从内存的节省跟操作效率去考虑。

    评论
  • a718089112 2022-07-05 01:42
    关注
    获得2.00元问题酬金

    推荐你使用消息队列处理,消息队列可以支持多台服务器同时处理你得数据

    评论
  • 歇歇 2022-07-05 02:02
    关注
    获得2.00元问题酬金

    参考多线程下载,只能用这个,其它容易混淆

    评论
  • 江湖是人情世故 2022-07-05 02:32
    关注
    获得1.00元问题酬金

    第一种:这种的话数据处理可以使用异步请求多线程来解决问题;每一个字符串给一个时间戳,使用redis的锁的方式来解决多次处理的问题。
    1,接收数据后,给一个时间戳,使用异步请求其他接口来处理数据
    2,异步处理接口,调用与不处理方法来处理;结果保存或者其他处理皆可。
    我们之前的c端风险控制管理就是这样做的;
    第二种:上述方法无法满足的情况下可以考虑集群+异步,速度更快
    队列或者消息中间件的话一般是保证结果正确;根据你的需求来设置需要的方案就好。

    评论
  • jzy3711 2022-07-07 06:08
    关注
    获得2.00元问题酬金

    1.kafka,flink也是java写的啊
    2.没必要自己处理,数据肯定要处理的,处理玩的要落地,架构选好符合业务就行,又不是行业大拿,也是不大公司哪有那多成本,直接借鉴人家的架构,自己改改就行了
    3.感觉你搞错,这东西没必要自己开发,你想的大公司都做好了,也开源了,拿来用就行

    评论
  • 吴维炜 前端领域优质创作者 2022-07-01 04:00
    关注

    1、indexof(String s)

    s为要搜索的字符串,如果查找到了就返回第一个匹配到的索引位置,如果没有匹配到就返回-1

    String str = "ljavadfjsdfhgjjfsjavajfdsj";
    System.out.println(str.indexOf("java"));
    2、indexof(String s,int n)

    s为要搜索的字符串,n为开始索引的位置,如果没有匹配到就返回-1

    3、lastIndexof(String s)

    返回最后一个指定字符串匹配到的位置,没有就返回-1

    4、startWith(String s)

    判断字符串是否以指定的字符串开头,返回类型为boolean类型

    5、endsWith(String s)

    判断字符串是否以指定的字符串结尾,返回类型为boolean类型

    6、trim()

    用于删除字符串首尾的空格

    7、split(String s)

    根据指定字符串分割原字符串,结果返回一个数组

    8、subString(int n)

    用于分割字符串,结果返回一个新的字符串,此字符串可与indexof配合分割字符串

    9、contains(String s)

    查找字符串中是否包含s,结果返回boolean类型

    
    String str = "ljavadfjsdfhgjjfsjavajfdsj";
            System.out.println(str.indexOf("java"));//1
            System.out.println(str.indexOf("java", 10));//17
            System.out.println(str.lastIndexOf("java"));
            System.out.println(str.startsWith("java"));//false
            System.out.println(str.endsWith("java"));//false
     
            System.out.println("  Hello world   ".trim());
            String ss = "java,php,c,pyhon,html";
            String[] s1 = ss.split(",");
            for (String s : s1) {
                System.out.println(s);
            }
            //截取第一个java开始到最后一个java之前的字符串
            String s2 = str.substring(str.indexOf("java"), str.lastIndexOf("java"));
            System.out.println(s2);
    
    

    展开全部

    评论
  • 关注
    获得2.00元问题酬金

    朋友我提几点建议
    1、相关的表一定要按相关条件建立索引。
    2、尽是用SQL语句,比你一条一条的做要快很多!!
    3、如果数据库太大了,定期清理数据并做压缩修复。
    望采纳谢谢啦

    评论
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 7月7日
  • 修改了问题 7月1日
  • 修改了问题 7月1日
  • 修改了问题 6月30日
  • 展开全部

悬赏问题

  • ¥15 pycharm倒入虚拟环境的时候,显示这个,但是我的虚拟环境已经创建了
  • ¥15 FPGA芯片60进制计数器
  • ¥15 前端js怎么实现word的.doc后缀文件在线预览
  • ¥20 macmin m 4连接iPad
  • ¥15 DBIF_REPO_SQL_ERROR
  • ¥15 根据历年月数据,用Stata预测未来六个月汇率
  • ¥15 DevEco studio开发工具 真机联调找不到手机设备
  • ¥15 请教前后端分离的问题
  • ¥100 冷钱包突然失效,急寻解决方案
  • ¥15 下载honeyd时报错 configure: error: you need to instal a more recent version of libdnet
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部