这就是我试图解决但不确定如何解决的问题:我有一个对象数组(假设大小为100),每个对象都有一些id。
Class Employee{
int EmployeeId;
}
有10个线程将从该数组中读取数据并将其插入数据库。
如何确保数据以递增序列的方式根据员工ID的序列插入数据库。例如:
如果数组中的对象具有员工ID 6、8和4,那么这些对象应该按照员工ID 4、6和8在数据库中的顺序插入数据库。如何为此编写多线程代码?
更新:请忽略数据库部分,如果它令人困惑,我的主要意图是并行处理但按顺序处理。
如果我理解正确,那么对于数组的每个条目,都必须按顺序执行一些任务(假设为10个)。
首先,您需要在实现可运行的类中按顺序组织这10个任务:
public class ThreadedTask implements Runnable {
private Employee employee;
public ThreadedWork(Employee employee) {
this.employee = employee;
}
public void executeTaskList(Employee employee) {
task1(employee);
task2(employee);
// ...
task10(employee);
}
public void run() {
executeTaskList();
notify();
}
}
然后,您可以实施以下解决方案之一:
我将在这里为选项2写一个简单的建议:
/*
* I am assuming that there`s an array called empArray, which holds 100 employees.
* It's up to you to decide how it is populated.
*/
public void processEmployees() {
// ...
for(Employee e : empArray) {
(new Thread(new ThreadedTask(e))).start()
}
// ...
}
如您所见,逻辑分为两部分:由您定义填充empArray的方式,以及如何创建和执行ThreadedTask对象。但是,线程任务为每个员工对象按顺序执行任务列表。
请注意,无法判断在任何给定时刻处理了哪个员工对象。所有员工都是并行处理的,但每个员工的任务都是按顺序执行的。
希望这有帮助
我认为你不理解线程在这里的使用。线程是指并行任务,其中(可能除了一些障碍)排序无关紧要,线程并行运行。这里需要一个简单的循环或其他类型的串行行为。
你可以很容易地做到这一点与一个线程。你可以走这条安全的路。线程不保证任何关于优化和排序的事情。如果预处理成本高昂,请以线程方式进行,然后确保所有线程都以倒计时锁存完成,然后插入到数据库中。
穿线可能导致死亡、窒息、发冷、发烧、溺水、感染、恶心以及无法控制重型机械。
默认情况下,C++容器应该是线程安全的。我必须错误地使用多线程,因为对于此代码: 我得到了:
在我的应用程序中,在程序的整个生命周期中,有n个操作必须依次发生。我决定为每个操作创建一个线程,让它们执行一次run方法,然后等待所有其他线程都执行相同的操作,等待轮到它,然后再次执行,依此类推,而不是创建实现这些操作的方法并在while(true)循环中按顺序调用它们。。。 为了实现这个机制,我创建了一个名为StatusHolder的类,它有一个名为threadTurn的字段(表示应该执行哪个线
问题内容: 我正在尝试在我正在处理的Python项目中使用线程,但是线程似乎没有按照我的代码的预期运行。似乎所有线程都按顺序运行(即,线程2在线程1结束后开始,它们不是同时启动)。我编写了一个简单的脚本来对此进行测试,并且该脚本也按顺序运行线程。 这是我从运行它得到的输出: 循环的迭代次数更多时,观察到相同的行为。 我尝试搜索网络和较早的SO答案,但找不到任何有帮助的方法。有人可以指出这段代码有什
问题内容: 我有3个线程第一打印A第二打印B第三打印C 我想按顺序打印ABCABCABC,依此类推..... 因此,我在下面编写了程序,但无法实现相同的目的。我知道一个问题,当时状态为1时,例如B1和C1线程正在等待,而当我做notifyAll()时,两个等待线程都被唤醒,并且取决于CPU分配,它可能会打印B或C。 在这种情况下,我只希望在A之后打印B。 我需要做什么修改。 问题答案: 将那些IF
我们有1000多条数据,请求1000次第三方个接口, 效率很是低下! 所以我想利用多线程的方式快速的调用完这1000次接口请求并处理响应 但是有个问题,线程是在for循环中执行的,调用顺序肯定是错乱的,这就导致接调用后 返回的结果肯定和List中的不匹配了··· 这种情况怎么能保证顺序呢?这是我的代码
问题内容: 如果我有这样的数据: 我如何将命令连接成这样: 我在下面使用了此查询,但命令列的顺序不依其顺序号而定: 任何意见和建议将不胜感激。^ _ ^ 问题答案: 永远不要使用。阅读为什么不在Oracle中使用WM_CONCAT函数? 请参阅本主题https://stackoverflow.com/a/28758117/3989608。 它没有记录,并且依赖的任何应用程序一旦升级到后都将无法工作