我是多线程的新手,我正在阅读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")))
)
}))
答案 0 :(得分:4)
唯一的区别是,对于第二行,您仍然可以通过变量Thread
访问新的t
实例。
例如,如果您想等待线程完成,您可以使用:
Thread t = new Thread(WriteB);
t.Start();
// ... do work while the other thread also does work ...
t.Join();
如果不将Thread
分配给变量,您将无法做到这一点。