这个问题不知道是你没说清楚还是我没看明白不过简单的实现以下还是比较简单的
既然多线程,那么,不同的保存方式就是两个不同的线程
然后你在调用的时候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){
thisentity = entity;
//用随机数得到1,2,如果是1则将a初始化为B,如果是2,则将a初始化为c
}
public void run(){
a保存(entity);
}
}
当然还有另外一个思路
你可以生成两个Entity的队列
一个队列是要用文件保存的任务一个队列是用数据库保存的队列
你在保存的时候,仅仅需要往不同的队列里放,然后就由专门的线程来去保存即可
手打~~如果还有问题,可追问不过大概明天才能回答,我一天回答一两个问题
你的提问就有问题
当你的程序不管是不是多线程的
获得到一个数据库连接是 数据库会把这个连接标记为繁忙 当其他程序访问时它会返回另外空闲的连接
连接个数是有限的 如果一直不释放连接 数据库就会告诉你连接已经使用完了
这里和线程安全有何关系呢? 线程安全和数据库 *** 作没有直接关系
优化建议:
1 在你的代码里大点评测下 每个 *** 作花的时间 譬如 dom4j解析花了多久, 存储到数据库花了多久等等
2 评测哪些地方可以并行 *** 作以提高CPU利用率;
3 数据库 *** 作部分也可以做适当优化, 譬如批量提交可以显著提高插入速度, 譬如去除索引/主键后插入等;
4 不同机器的IO速度是不同的, 因此应该能提供运行时的任务调度参数化, 譬如多少个dom4j解析线程, 入库的批量数量等;
设置connautocommit(false)
这样就不会存在自动提交 也就是说 你的 *** 作还只是内存 *** 作 别人看到的只能是没有变化的表 直到你循环完毕用conncommit()
继承Thread类,然后构建该类对象,调用start();
或者实现Runnable 接口,构建该实现类对象,然后构建线程对象,同样调用start方法。如:
//第一种
public class A extends Thread{
public void run(){
systemoutprintln("a");
}
public static void main(String []args){
A a1 = new A();//创建线程1
A a2 = new A();//创建线程2
a1start();//线程1启动
a2start();//线程2启动
}
}
//第二种
public class B implements Runnable{
public void run(){
Systemoutprintln("b");
}
public static void main (String []args){
B b = new B();
Thread t1= new Thread(b);
Thread t2 =new Thread(b);
t1start();
t2start();
}
}
以上就是关于我想把数据能保存到文件中又能保存到数据库中,用java的多线程如何实现这个功能全部的内容,包括:我想把数据能保存到文件中又能保存到数据库中,用java的多线程如何实现这个功能、JAVA多线程访问数据库如何实现线程安全、Java多线程并发 *** 作数据库能否提高运行速度。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)