我正在编写一个多线程应用程序,它有几个线程(大约25个),每个线程执行一个特定的进程,然后更新数据库,然后给下一个线程处理另一个线程的权限过程和做同样的事情。基本上,线程1进程然后更新数据库为完成,然后当线程二读取数据库完成它开始处理和过程继续,直到线程25.任何人都知道这是如何在Java中可能?多线程与数据库(mysql或oracle)
回答
您可以在每个线程中使用简单的逻辑检索数据(使用select查询),但为了更新数据,建议在同步块中执行查询。由于其他线程依赖于此线程正在修改的数据,因此在获取记录时可能会导致问题。
为什么25呢?
无论如何,你所说的肯定是可能的,但你可能想创建一个特殊的线程,获得每个线程计算出来的结果值并将其提交给数据库。
这样你需要有一个线程可以访问数据库,其他所有线程都不必等待数据库。
我不知道我完全得到你的要求,但在这里是一个高层次的算法:
创建所需数量的线程,并把它们放入数组。
现在从第二个线程开始到最后一个,每个线程必须在前一个线程上执行
join()
;这将有助于每个负责人在完成之前运行它的处理和更新部分。
可能的代码:
Thread类声明
class WaitingThread extends Thread
{
private Thread previousThread;
public WaitingThread(final Thread previous)
{
this.previousThread = previous;
}
public void run()
{
doParallelTask();
if(previousThread != null)
{
previousThread.join();
}
doProcesingAndUpdating();
}
}
阵列声明和初始化;
final Thread [] threads = new Thread[25];
for(int i = 0; i < 25; i++)
{
if(i == 0)
{
threads[i] = new WaitinThread(null);
}
else
{
threads[i] = new WaitingThread(threads[i - 1]);
}
}
希望这会有所帮助。
PS:我必须承认,在上述模型中,使用多线程执行doParallelTask()
以及使用单个线程执行该操作更有意义。
Downvoter,关心评论? –
你提的问题是非常一般,但我会采取的做法是这样的:
指定一个线程中控制器线程。这是工作是听取工作线程完成他们的处理。做最简单的方法是用信号对象和
wait
/notify
方式 - 控制器线程将采取对信号锁,然后调用wait
。创建工人线程,每个线程对,每个线程需要的锁,并再次调用
wait
自己的信号对象。触发以开始处理(这可能是运行应用程序时,用户点击一个按钮,等等)获得控制器的旗语上的锁,并调用
notify
针对它唤醒控制器线。 控制器的工作是从池中选择一个工作线程,获得其信号量的锁和呼叫notify
使工人清醒。 控制器然后自己调用wait
信号量。那么工人线程可以读取数据库,做了处理,并写回数据库它控制器的信号上呼吁
notify
之前与控制器导致进程重新启动针对其自己的工作人员其中一个线程的*信号*和wait
调用notify
。
最后提醒一句,这是实现你所描述的一般行为有什么需要的一个非常简短的提纲。线程可能是计算机科学中最被误解的主题,非常容易出错。在跳入多线程系统之前,请确保至少您已阅读Brian Goatz's - Java Concurrency In Practice
- 1. 使用oracle和mysql对数据库进行多线程
- 2. 与在线数据库mysql的Android应用程序mysql与离线数据库同步sqliye
- 3. Mysql多个离线数据库
- 4. 使用在线mysql数据库与java
- 5. 与sencha在线mysql数据库连接?
- 6. 搜索MySQL数据库与下划线
- 7. 多线程任务库,Threading.Timer或线程?
- 8. Java *多线程与MySQL
- 9. mysql一个或多个数据库?
- 10. Oracle数据库多实例
- 11. subsonic与oracle数据库
- 12. mvc2与oracle数据库
- 13. VB.net多线程与许多数据库调用
- 14. LDAP数据库如何与SQL或MySql数据库不同
- 15. 多线程应用程序死锁问题与数据库
- 16. 搜索MySQL数据库与多个“其中”和“或”不工作
- 17. 与MYSQL数据库
- 18. 远程访问sqlite或mysql数据库
- 19. sqlalchemy引擎多个数据库与mysql
- 20. 使用JDBC与在线MySQL数据库的Android应用程序
- 21. MySQL在线数据库
- 22. 在线MySQL数据库
- 23. Flask MySQL在线数据库
- 24. 多线程数据库查询
- 25. Java和数据库中的多线程
- 26. 多线程数据库访问
- 27. 多线程保存到数据库
- 28. 多线程数据库提取xcode
- 29. Spring数据仓库多线程性能
- 30. System.Data.SQLite内存数据库多线程
如果要让所有线程顺序执行,为什么首先使用多个线程?只使用一个线程。 –