如何让多个线程共享一个数据库连接对象

如何让多个线程共享一个数据库连接对象,第1张

不行吧。连接数据库要连接池,就是connection对象要放在一个LinkedList里面,然后每个线程一个。这个这个List被封装在一个单例模式的对象里。线程要是共享connection,要是搞起并发来,一下子就挂了。

多个线程在访问同一个数据库中的记录的时候,在大并发的情况下,一定要做好事务机制。要不然后果还是很扎心的。可能遇到这样的问题的时候首先想到的就是同步锁机制了。

并发产生的情况

以我的平时工作的经验来说,凡是涉及多线程的并发访问的问题一定要小心。因为一不小心就会产生死锁问题。平时编程的时候更要多注意这方面的问题。我们可以产生问题的情况是复杂的,两个线程争同一个对象会有问题,如果你只静态的方法,简单的逻辑不是问题,但是如果你的线程是修改静态变量的值,那应该是线程问题造成的。

java多线程并发

最经典的多并发的情况就是生产者和消费者的问题了吧。之前在学校学习 *** 作系统的时候,经常因为类似的并发 *** 作的问题想很久。后来工作的时候真正的实践以后,更能很好的体会到并发线程 *** 作的难度。java是线程安全的,即对任何方法(包括静态方法)都可以不考虑线程冲突,但有一个前提,就是不能存在全局变量。如果存在全局变量,则需要使用同步机制。

并发连接数据库

其实在实际项目开发汇总,首先要做的就是避免多个线程共用一个数据库连接,这样会很容易出问题,最好是一个线程一个连接。在必要的时候需要线程同步或存储过程加锁。如果有比较复杂的事务 *** 作的话就需要加锁了,如果不加的话就会出现你说的脏读、死锁等问题。

#include <QCoreApplication>

#include "thread.h"

#include <QVector>

#include <QDebug>

int main(int argc, char *argv[])

{

QCoreApplication a(argc, argv)

QVector<Thread*>vector

Thread *thread

//创建多个线程,并start

for(int i=0i<10i++){

thread=new Thread

vector.append(thread)

thread->set(i)

thread->start()

}

//等待所有线程执行完,然后删除线程

foreach(thread,vector){

thread->wait()

}

foreach(thread,vector){

delete thread

}

return a.exec()

}

-------------------------------------------------------------------------------------------------

#include "thread.h"

Thread::Thread(QObject *parent) : QThread(parent)

{

}

void Thread::run()

{

begin()

}

//为每个线程创建一个连接名

void Thread::set(int a)

{

connectionName=QString::number(a)

}

void Thread::connectionDatabase(QString dbName)

{

QSqlDatabasedb=QSqlDatabase::addDatabase("QMYSQL",connectionName)

db.setHostName("localhost")

db.setDatabaseName(dbName)

db.setUserName("root")

db.setPassword("")

if(!db.open())

qDebug()<<"db open fail"

}

void Thread::begin()

{

QString dbName="learnsql"

connectionDatabase(dbName)

QSqlDatabase db=QSqlDatabase::database(connectionName)

db.transaction()//开启事物

QSqlQuery query(db)

//向表student中插入10000条数据

for(int i=1i<=10000i++){

query.exec("insert into student values(1)")

}

db.commit()//提交事物

}


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存