Java 线程并发文件修改
我今天刚开始学习Scala,所以这可能是一个非常简单的问题。我试图从多个线程写入文件,但我只从第一个线程获得结果。我已经读了很多关于Java 线程并发文件修改,java,multithreading,scala,Java,Multithreading,Scala,我今天刚开始学习Scala,所以这可能是一个非常简单的问题。我试图从多个线程写入文件,但我只从第一个线程获得结果。我已经读了很多关于Futures的书,但是我找不到一个有效的实现(很可能是因为我不了解一些东西)。有人能解释一下如何让多个线程写入同一个文件吗 import scala.concurrent.duration._ import scala.concurrent.ExecutionContext.Implicits.global import scala.collection.muta
Futures
的书,但是我找不到一个有效的实现(很可能是因为我不了解一些东西)。有人能解释一下如何让多个线程写入同一个文件吗
import scala.concurrent.duration._
import scala.concurrent.ExecutionContext.Implicits.global
import scala.collection.mutable.ListBuffer
import util.Random.nextInt
import java.io.IOException
import java.io.FileWriter;
object HelloWorld {
def main(args: Array[String]) {
val p1=1<<56
val p2=7<<52
val p3=0<<32
val r = scala.util.Random
val fw = new FileWriter("steam_out_scala.txt", true)
for (i <- 0 to 3) {
val thread = new Thread {
override def run {
val p4=r.nextInt(1000000)
val url=("http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=XXXYYYZZZ,steamids="+((p1|p2)|(p3|p4))).toString
try{
val in = scala.io.Source.fromURL(url.toString,"utf-8")
fw.write(((p1|p2)|(p3|p4)).toString)
//fw.close()
}
catch{
case e: IOException => { //catches api call fail AND file write failed
println("failed for num: "+(((p1|p2)|(p3|p4)).toString))
}
}
}
}
thread.start
//Thread.sleep(50)
}
fw.close() //moved here
}}
导入scala.concurrent.duration_
导入scala.concurrent.ExecutionContext.Implicits.global
导入scala.collection.mutable.ListBuffer
导入util.Random.nextInt
导入java.io.IOException
导入java.io.FileWriter;
对象HelloWorld{
def main(参数:数组[字符串]){
val p1=1我认为这根本不是scala的问题
在启动线程之前创建一个FileWriter
,但在第一次写入之后关闭它:
fw.write(((p1|p2)|(p3|p4)).toString)
fw.close()
因此,如果您确保只有在最后一个线程完成后才关闭FileWriter
。您应该更进一步。不过,您可能不想使用线程,而是想看看Akka。我认为这根本不是scala的问题
在启动线程之前创建一个FileWriter
,但在第一次写入之后关闭它:
fw.write(((p1|p2)|(p3|p4)).toString)
fw.close()
因此,如果您确保只有在最后一个线程完成后才关闭FileWriter
,那么您应该更进一步。不过,您可能想看看Akka,而不是使用线程