JAVA并发处理经验(四)并行模式与算法4:并行搜索模式

简介: 一、前言在并行搜索模式中,主要是内存数据很大,需要查找的情况。因为我们通常需要查找数据库返回的结果据很少,在几百条以内。

一、前言

在并行搜索模式中,主要是内存数据很大,需要查找的情况。因为我们通常需要查找数据库返回的结果据很少,在几百条以内。

但是在平台软件开发中,可能遇到并行搜索的情况。其实很简单就是将数据分段进行检索;

二、并行搜索模式

package pattern.search;

import org.omg.PortableInterceptor.INACTIVE;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.*;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * Created by ycy on 16/1/16.
 * 适用场景:有很多系统变量需要查询,或者查询redis这样数据量大得list
 * web适用场景比较少,但是作为平台软件是很常用的
 */
public class SearchDemo {
    //定义我们需要查询的无序数组
    static int[] arr={1,22,2,3,4,5,344,6,7,8,10,9};
    //定义线程池数据,已经存放结果的Result
    static ExecutorService pool= Executors.newCachedThreadPool();
    static final int thread_num=2;
    static AtomicInteger result=new AtomicInteger(-1);//初始值定位-1

    public static int search(int searchValue ,int beginPos,int endPos){
        int j=0;
        for (j = beginPos; j <endPos ; j++) {
            if (result.get()>=0){
                return result.get();
            }

            if (arr[j]==searchValue){
                //如果设置失败,表示其他现场已经先找到了
                if (!result.compareAndSet(-1,j)){
                    //如果当前值 == 预期值,则以原子方式将该值设置为给定的更新值。
                    //-1当前值为-1就返回
                    return result.get();
                }
                return j;
            }

        }
       return -1;
    }

    public static class SearchTask implements Callable<Integer>{
        int begin,end,searchValue;
        public SearchTask(int searchValue,int begin,int end){
            this.begin=begin;
            this.end=end;
            this.searchValue=searchValue;
        }

        public Integer call() throws Exception {
            int re=search(searchValue,begin,end);
            return re;
        }
    }

    public static int psearch(int searchValue) throws InterruptedException,ExecutionException{
        int subArrSize=arr.length/thread_num+1;
        List<Future<Integer>> re=new ArrayList<Future<Integer>>();

        for (int i = 0; i <arr.length ; i+=subArrSize) {
            int end=i+subArrSize;
            if (end>=arr.length) end=arr.length;
            re.add(pool.submit(new SearchTask(searchValue,i,end)));
        }
        for (Future<Integer> fu:
             re) {
            if (fu.get()>=0) return (fu.get());

        }
        return  -1;
    }

    public static void main(String[] args) {
        try {
            System.out.println(psearch(9));
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
    }
}


目录
相关文章
|
13天前
|
存储 算法 安全
探究‘公司禁用 U 盘’背后的哈希表算法与 Java 实现
在数字化办公时代,信息安全至关重要。许多公司采取“禁用U盘”策略,利用哈希表算法高效管理外接设备的接入权限。哈希表通过哈希函数将设备标识映射到数组索引,快速判断U盘是否授权。例如,公司预先将允许的U盘标识存入哈希表,新设备接入时迅速验证,未授权则禁止传输并报警。这有效防止恶意软件和数据泄露,保障企业信息安全。 代码示例展示了如何用Java实现简单的哈希表,模拟公司U盘管控场景。哈希表不仅用于设备管理,还在文件索引、用户权限等多方面助力信息安全防线的构建,为企业数字化进程保驾护航。
|
3月前
|
存储 人工智能 算法
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
这篇文章详细介绍了Dijkstra和Floyd算法,这两种算法分别用于解决单源和多源最短路径问题,并且提供了Java语言的实现代码。
112 3
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
|
1月前
|
算法 搜索推荐
如何用CRDT算法颠覆文档协作模式?
在局域网环境下,高效文档协同编辑面临版本冲突等核心技术挑战,影响协作效率和成果质量。为解决此问题,可采用基于CRDT的算法,允许多用户无冲突实时编辑;或将协同操作模块化,通过任务看板优化协作流程,减少冲突,提高团队效率。未来,局域网协同编辑将更加场景化与个性化,深入探索组织协作文化。
|
2月前
|
算法 搜索推荐 数据库
二分搜索:高效的查找算法
【10月更文挑战第29天】通过对二分搜索的深入研究和应用,我们可以不断挖掘其潜力,为各种复杂问题提供高效的解决方案。相信在未来的科技发展中,二分搜索将继续发挥着重要的作用,为我们的生活和工作带来更多的便利和创新。
67 1
|
4月前
|
Java
Java搜索与替换
Java搜索与替换
32 4
Java搜索与替换
|
3月前
|
算法 决策智能
基于禁忌搜索算法的VRP问题求解matlab仿真,带GUI界面,可设置参数
该程序基于禁忌搜索算法求解车辆路径问题(VRP),使用MATLAB2022a版本实现,并带有GUI界面。用户可通过界面设置参数并查看结果。禁忌搜索算法通过迭代改进当前解,并利用记忆机制避免陷入局部最优。程序包含初始化、定义邻域结构、设置禁忌列表等步骤,最终输出最优路径和相关数据图表。
|
3月前
|
算法 Java 数据中心
探讨面试常见问题雪花算法、时钟回拨问题,java中优雅的实现方式
【10月更文挑战第2天】在大数据量系统中,分布式ID生成是一个关键问题。为了保证在分布式环境下生成的ID唯一、有序且高效,业界提出了多种解决方案,其中雪花算法(Snowflake Algorithm)是一种广泛应用的分布式ID生成算法。本文将详细介绍雪花算法的原理、实现及其处理时钟回拨问题的方法,并提供Java代码示例。
123 2
|
4月前
|
大数据 UED 开发者
实战演练:利用Python的Trie树优化搜索算法,性能飙升不是梦!
在数据密集型应用中,高效搜索算法至关重要。Trie树(前缀树/字典树)通过优化字符串处理和搜索效率成为理想选择。本文通过Python实战演示Trie树构建与应用,显著提升搜索性能。Trie树利用公共前缀减少查询时间,支持快速插入、删除和搜索。以下为简单示例代码,展示如何构建及使用Trie树进行搜索与前缀匹配,适用于自动补全、拼写检查等场景,助力提升应用性能与用户体验。
80 2
|
3月前
|
前端开发 算法 JavaScript
无界SaaS模式深度解析:算力算法、链接力、数据确权制度
私域电商的无界SaaS模式涉及后端开发、前端开发、数据库设计、API接口、区块链技术、支付和身份验证系统等多个技术领域。本文通过简化框架和示例代码,指导如何将核心功能转化为技术实现,涵盖用户管理、企业店铺管理、数据流量管理等关键环节。
|
4月前
|
存储 Java 开发者
【Java新纪元启航】JDK 22:解锁未命名变量与模式,让代码更简洁,思维更自由!
【9月更文挑战第7天】JDK 22带来的未命名变量与模式匹配的结合,是Java编程语言发展历程中的一个重要里程碑。它不仅简化了代码,提高了开发效率,更重要的是,它激发了我们对Java编程的新思考,让我们有机会以更加自由、更加创造性的方式解决问题。随着Java生态系统的不断演进,我们有理由相信,未来的Java将更加灵活、更加强大,为开发者们提供更加广阔的舞台。让我们携手并进,共同迎接Java新纪元的到来!
91 11

热门文章

最新文章