我有一个包含65000个字符串的字符串列表。我需要循环遍历所有这些字符串并执行一些任务。运行for循环迭代65000次需要更多时间。所以我想开始4到5个线程,它们可以划分这个列表数据并单独执行10000到15000个数据。我已经了解了使用Thread类启动和中止线程。但我不清楚多线程和线程管理以及实现锁定机制,以便多个线程不会对相同的数据和执行顺序起作用。
我是线程概念的新手。请帮助。任何代码示例将不胜感激 感谢。
答案 0 :(得分:3)
我建议 PLinq (Parallel Linq)作为第一次尝试:
myList
.AsParallel()
.WithDegreeOfParallelism(4)
.ForAll(item => MyRoutine(item));
另一个选项是Parallel.ForEach
:
ParallelOptions op = new ParallelOptions() {
MaxDegreeOfParallelism = 4,
};
Parallel.ForEach(myList, op, item => MyRoutine(item));
编辑:请注意,许多类不包含线程安全,List<T>
(请参阅下面的评论)。如果要将数据具体化到列表中,请使用 PLinq :
List<string> listStrings = myList
.AsParallel()
.WithDegreeOfParallelism(4)
.Select(item => item.text.Substring(5, item.text.Length)))
.ToList(); // <- this is thread safe