我想把数据能保存到文件中又能保存到数据库中,用java的多线程如何实现这个功能

我想把数据能保存到文件中又能保存到数据库中,用java的多线程如何实现这个功能,第1张

这个问题...不知道是你没说清楚还是我没看明白.不过简单的实现以下还是比较简单的

既然多线程,那么,不同的保存方式就是两个不同的线程.

然后你在调用的时候new 出来这个d对象,然后运行这个d对象,就可以开了一个线程执行了.

interface A{

    boolean 保存(Entity entity)

}

class B implements A{

    public boolean 保存(Entity entity){

        //文件保存

    }

}

class C implements A{

    public boolean 保存(Entity entity){

        //数据库保存

    }

}

class Main{

     public static void main(String[]args){

        Entity entity = new Entity()

        D d = new D(entity)

        new Thread(D).start()

    }

}

class D implements Runnable{

    private A a

    private Entity entity

    public D(Entity entity){

        this.entity = entity

        //用随机数得到1,2,如果是1则将a初始化为B,如果是2,则将a初始化为c

    }

    public void run(){

        a.保存(entity)

    }

}

当然还有另外一个思路.

你可以生成两个Entity的队列

一个队列是要用文件保存的任务.一个队列是用数据库保存的队列.

你在保存的时候,仅仅需要往不同的队列里放,然后就由专门的线程来去保存即可

手打~~如果还有问题,可追问.不过大概明天才能回答,我一天回答一两个问题

要看你用的是什么语言,如果是php的,你可以这样考虑,

首先一个是将这两个分为两个队列来实现, 一个用来实现消息优先级,一个来实现定时发送

用的是redis的有序集合,用zadd添加时,将score比做是优先级,也可以用时间戳来当做score,用来表示时间

将消息加入优先级的队列,将1,2替换为时间就是定时发送的队列了

$redis = new Redis()

$redis->connect('127.0.0.1', 6379)

$redis->zAdd('zset1', 1, 'message')

$redis->zAdd('zset1', 2, 'message2')

从队列中取出数据

$redis->zRevRangeByScore('zset1, '+inf', '-inf', array('withscores'=>false, 'limit'=>array(0,20)))

这条语句表示从zset1这个队列里按照score从最大(+inf)到最小(-inf)的排序中取出20条,不带score,如果想要从小到大可以用 zRangeByScore

如果你想让这些都运行在命令行下,可以参考下面来,当然这些是经过删减的

<?php

while (true) {

$pid = pcntl_fork()

if ($pid == -1) {

echo date('Y-m-d H:i:s') . "fork失败!\n"

} else if ($pid == 0) {

$redis = new Redis()

$redis->connect('127.0.0.1', 6379)

$redis->zRevRangeByScore('zset1', '+inf', '-inf', array('withscores'=>false, 'limit'=>array(0,20)))

exit

} else {

pcntl_wait($status)

}

}

pcntl_fork是PHP中的生成子进程,当调用该函数时,会返回一个进程pid,当pid为0时表明是在子进程中,所以把要执行的东西全放这里,这样就实现了


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9941406.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-03
下一篇 2023-05-03

发表评论

登录后才能评论

评论列表(0条)

保存