Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 线程并发文件修改_Java_Multithreading_Scala - Fatal编程技术网

Java 线程并发文件修改

Java 线程并发文件修改,java,multithreading,scala,Java,Multithreading,Scala,我今天刚开始学习Scala,所以这可能是一个非常简单的问题。我试图从多个线程写入文件,但我只从第一个线程获得结果。我已经读了很多关于Futures的书,但是我找不到一个有效的实现(很可能是因为我不了解一些东西)。有人能解释一下如何让多个线程写入同一个文件吗 import scala.concurrent.duration._ import scala.concurrent.ExecutionContext.Implicits.global import scala.collection.muta

我今天刚开始学习Scala,所以这可能是一个非常简单的问题。我试图从多个线程写入文件,但我只从第一个线程获得结果。我已经读了很多关于
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,而不是使用线程