这两种做法之间的区别是什么:

时间:2017-05-11 08:23:23

标签: c# multithreading thread-safety

我是多线程的新手,我正在阅读Albahari Joe写的一本书并观看关于Pluralsight的课程,但是当我想了解更多关于线程以及如何正确,安全和有效地使用线程时,我经常陷入困境他们。我在这里搜索了一个解决方案,但找不到解决方案。所以请不要为我的基本问题烦恼!任何帮助,将不胜感激。提前谢谢。

csv_files <- list.files("./path/to/csvs", ".csv$")
# [1] "124-type1.csv"  "723-type1.csv"  "899-type1.csv"  "124-type2.csv" 
# [5] "723-type2.csv"  "100-type2.csv"  "wrong-file.csv"

ids_in_common <- intersect(
  sub("-type1\\.csv$", "", grep("type1", csv_files, value = TRUE)),
  sub("-type2\\.csv$", "", grep("type2", csv_files, value = TRUE))
)
# [1] "124" "723"
do.call("rbind", lapply(ids_in_common, function(id) {
  merge(
    read.table(file.path("./path/to/csvs", paste0(id, "-type1.csv"))),
    read.table(file.path("./path/to/csvs", paste0(id, "-type2.csv")))
  )
}))

1 个答案:

答案 0 :(得分:4)

唯一的区别是,对于第二行,您仍然可以通过变量Thread访问新的t实例。

例如,如果您想等待线程完成,您可以使用:

Thread t = new Thread(WriteB); 
t.Start();
// ... do work while the other thread also does work ...
t.Join();

如果不将Thread分配给变量,您将无法做到这一点。