JAVA CACHE

本文介绍了一个基于Java实现的任务缓存系统,该系统能够按ID、IP和主机名查询任务,并具备过期任务自动清理的功能。通过使用哈希映射和定时任务调度,实现了高效的任务管理和查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >








public class TaskCache implements API, Runnable {

    public TaskCache() {
        startSchedule();
    }

    private Map<String, List<Task>> taskMap = new HashMap<String, List<Task>>();

    private final String ID = "ID_";
    private final String HOST = "HOST_";
    private final String IP = "IP_";
    private ConcurrentMap<Long, Task> timeMap = new ConcurrentHashMap<Long, Task>();

    public Map<Long, Task> getTimeMap() {
        return timeMap;
    }


    public void put(Task task, Long time) {

        synchronized(taskMap) {

            timeMap.put(time,task);
            if (taskMap.containsKey(ID + task.getId())) {
                taskMap.get(ID + task.getId()).add(task);
            } else {
                List<Task> idTask = new ArrayList<Task>();
                idTask.add(task);
                taskMap.put(ID + task.getId(), idTask);

            }

            if (taskMap.containsKey(IP + task.getIp())) {
                taskMap.get(IP + task.getIp()).add(task);
            } else {
                List<Task> ipTask = new ArrayList<Task>();
                ipTask.add(task);
                taskMap.put(IP + task.getIp(), ipTask);

            }

            if (taskMap.containsKey(HOST + task.getHost())) {
                taskMap.get(HOST + task.getHost()).add(task);
            } else {
                List<Task> hostTask = new ArrayList<Task>();
                hostTask.add(task);
                taskMap.put(HOST + task.getHost(), hostTask);

            }


        }
    }

    public void add(Task task, int expiredTime) {
        try {
            synchronized(taskMap) {
                System.out.println("task map size : "+taskMap.size());
                put(task, expiredTime + System.currentTimeMillis());

            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public List<Task> queryById(String id) {

        synchronized(taskMap) {

            return taskMap.get(ID + id);
        }
    }

    public List<Task> queryByIp(String ip) {
        synchronized(taskMap) {
            return taskMap.get(IP + ip);
        }
    }

    public List<Task> queryByHost(String host) {
        synchronized(taskMap) {
            return taskMap.get(HOST + host);
        }
    }

    public void remove(Task task) {
        try {
            synchronized(taskMap) {
                List idList = taskMap.get(ID + task.getId());
                if (idList!=null&&idList.contains(task)) {
                    idList.remove(task);
                    if (idList.size() == 0) {
                        System.out.println("remove ipList " + ID + task.getId());
                        taskMap.remove(ID + task.getId
                                ());
                    }
                    System.out.println(task.toString() + " has removed from idList");
                } else {
                    System.out.println("no operation idList");
                }
                List ipList = taskMap.get(IP + task.getIp());
                if (ipList!=null&& ipList.contains(task)) {
                    ipList.remove(task);
                    System.out.println(task.toString() + " has removed ipList");
                    if (ipList.size() == 0) {
                        System.out.println("remove ipList " + IP + task.getIp());
                        taskMap.remove(IP + task.getIp());
                    }
                } else {
                    System.out.println("no operation ipList");
                }
                List hostList = taskMap.get(HOST + task.getHost());
                if (hostList!=null &&hostList.contains(task)) {
                    hostList.remove(task);
                    System.out.println(task.toString() + " has removed hostList");
                    if (hostList.size() == 0) {
                        System.out.println("remove hostlist " + HOST + task.getHost());
                        taskMap.remove(HOST + task.getHost());
                    }
                } else {
                    System.out.println("no operation hostList");
                }

            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void run() {
        try {
            for (Long key : timeMap.keySet()) {
                System.out.println("prepare remove task "+key);
                long current = System.currentTimeMillis();
                if (current > key) {
                    Task t = timeMap.get(key);
                    System.out.println("remove t");
                    remove(t);

                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void startSchedule() {

        ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
        service.scheduleAtFixedRate(this, 0, 2, TimeUnit.SECONDS);
    }
}
/**
 * Created by baidu on 15/9/23.
 */
public class Task {

    private String id;
    private String ip;
    private String host;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getIp() {
        return ip;
    }

    public void setIp(String ip) {
        this.ip = ip;
    }

    public String getHost() {
        return host;
    }

    public void setHost(String host) {
        this.host = host;
    }

    @Override
    public String toString() {
        return "Task{" +
                "id='" + id + '\'' +
                ", ip='" + ip + '\'' +
                ", host='" + host + '\'' +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }

        Task task = (Task) o;

        if (!id.equals(task.id)) {
            return false;
        }
        if (!ip.equals(task.ip)) {
            return false;
        }
        return host.equals(task.host);

    }

    @Override
    public int hashCode() {
        int result = id.hashCode();
        result = 31 * result + ip.hashCode();
        result = 31 * result + host.hashCode();
        return result;
    }
}

/**
 * Created by baidu on 15/9/24.
 */
public class TaskFactory {
    public static Task buildTask(){
        Task task = new Task();
        task.setId(UUID.randomUUID().toString());
        task.setHost(UUID.randomUUID().toString());
        task.setIp(UUID.randomUUID().toString());
        return task;
    }

    public static void main(String[] args) {
        System.out.println("haha");
    }
}

/**
 * Created by baidu on 15/9/23.
 */
public interface API {

    public void add(Task task ,int expiredTime);

    public List<Task> queryById(String id);

    public List<Task> queryByIp(String ip);

    public List<Task> queryByHost(String host);

}

public class CacheTest {
    public static void main(String[] args) {
        API api = new TaskCache();


        while (true){
            api.add(TaskFactory.buildTask(),5000);
            try {
                Thread.sleep(50);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

        }

    }

}



内容概要:本文深入探讨了Kotlin语言在函数式编程和跨平台开发方面的特性和优势,结合详细的代码案例,展示了Kotlin的核心技巧和应用场景。文章首先介绍了高阶函数和Lambda表达式的使用,解释了它们如何简化集合操作和回调函数处理。接着,详细讲解了Kotlin Multiplatform(KMP)的实现方式,包括共享模块的创建和平台特定模块的配置,展示了如何通过共享业务逻辑代码提高开发效率。最后,文章总结了Kotlin在Android开发、跨平台移动开发、后端开发和Web开发中的应用场景,并展望了其未来发展趋势,指出Kotlin将继续在函数式编程和跨平台开发领域不断完善和发展。; 适合人群:对函数式编程和跨平台开发感兴趣的开发者,尤其是有一定编程基础的Kotlin初学者和中级开发者。; 使用场景及目标:①理解Kotlin中高阶函数和Lambda表达式的使用方法及其在实际开发中的应用场景;②掌握Kotlin Multiplatform的实现方式,能够在多个平台上共享业务逻辑代码,提高开发效率;③了解Kotlin在不同开发领域的应用场景,为选择合适的技术栈提供参考。; 其他说明:本文不仅提供了理论知识,还结合了大量代码案例,帮助读者更好地理解和实践Kotlin的函数式编程特性和跨平台开发能力。建议读者在学习过程中动手实践代码案例,以加深理解和掌握。
内容概要:本文深入探讨了利用历史速度命令(HVC)增强仿射编队机动控制性能的方法。论文提出了HVC在仿射编队控制中的潜在价值,通过全面评估HVC对系统的影响,提出了易于测试的稳定性条件,并给出了延迟参数与跟踪误差关系的显式不等式。研究为两轮差动机器人(TWDRs)群提供了系统的协调编队机动控制方案,并通过9台TWDRs的仿真和实验验证了稳定性和综合性能改进。此外,文中还提供了详细的Python代码实现,涵盖仿射编队控制类、HVC增强、稳定性条件检查以及仿真实验。代码不仅实现了论文的核心思想,还扩展了邻居历史信息利用、动态拓扑优化和自适应控制等性能提升策略,更全面地反映了群体智能协作和性能优化思想。 适用人群:具备一定编程基础,对群体智能、机器人编队控制、时滞系统稳定性分析感兴趣的科研人员和工程师。 使用场景及目标:①理解HVC在仿射编队控制中的应用及其对系统性能的提升;②掌握仿射编队控制的具体实现方法,包括控制器设计、稳定性分析和仿真实验;③学习如何通过引入历史信息(如HVC)来优化群体智能系统的性能;④探索中性型时滞系统的稳定性条件及其在实际系统中的应用。 其他说明:此资源不仅提供了理论分析,还包括完整的Python代码实现,帮助读者从理论到实践全面掌握仿射编队控制技术。代码结构清晰,涵盖了从初始化配置、控制律设计到性能评估的各个环节,并提供了丰富的可视化工具,便于理解和分析系统性能。通过阅读和实践,读者可以深入了解HVC增强仿射编队控制的工作原理及其实际应用效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值