คำถามติดแท็ก synchronization

การซิงโครไนซ์หมายถึงการใช้การควบคุมเพื่อรักษาการแทนที่สอดคล้องกันทั้งกลุ่มของกระบวนการที่รันโปรแกรมเดียวกัน (การซิงโครไนซ์กระบวนการ) หรือการแทนข้อมูล (การซิงโครไนซ์ข้อมูล)

8
Java Singleton และการซิงโครไนซ์
โปรดชี้แจงข้อสงสัยของฉันเกี่ยวกับ Singleton และ Multithreading: วิธีใดเป็นวิธีที่ดีที่สุดในการนำ Singleton ไปใช้ใน Java ในสภาพแวดล้อมแบบมัลติเธรด จะเกิดอะไรขึ้นเมื่อหลายเธรดพยายามเข้าถึงgetInstance() วิธีการในเวลาเดียวกัน เราสามารถสร้างซิงเกิลตันได้getInstance() synchronizedหรือไม่? การซิงโครไนซ์จำเป็นจริงๆหรือไม่เมื่อใช้คลาส Singleton



5
จะรอให้ goroutines ทั้งหมดเสร็จได้อย่างไรโดยไม่ต้องใช้เวลานอนหลับ?
รหัสนี้เลือกไฟล์ xml ทั้งหมดในโฟลเดอร์เดียวกันเนื่องจากไฟล์ปฏิบัติการที่เรียกใช้และอะซิงโครนัสจะใช้การประมวลผลกับแต่ละผลลัพธ์ในวิธีการโทรกลับ (ในตัวอย่างด้านล่างจะพิมพ์เฉพาะชื่อของไฟล์เท่านั้น) ฉันจะหลีกเลี่ยงการใช้วิธีการนอนหลับเพื่อป้องกันไม่ให้วิธีหลักออกไปได้อย่างไร? ฉันมีปัญหาในการห่อหัวของฉันไปรอบ ๆ ช่อง (ฉันคิดว่านั่นคือสิ่งที่ต้องใช้ในการซิงโครไนซ์ผลลัพธ์) ดังนั้นขอขอบคุณความช่วยเหลือใด ๆ ! package main import ( "fmt" "io/ioutil" "path" "path/filepath" "os" "runtime" "time" ) func eachFile(extension string, callback func(file string)) { exeDir := filepath.Dir(os.Args[0]) files, _ := ioutil.ReadDir(exeDir) for _, f := range files { fileName := f.Name() if extension …

30
ผลลัพธ์ความละเอียด NDK: การตั้งค่าโครงการ: รุ่น Gradle model = 5.4.1, เวอร์ชัน NDK เป็นข้อผิดพลาด UNKNOWN
หลังจากอัปเดต Android Studio และ Gradle เป็น 3.5 ตอนนี้ฉันได้รับข้อผิดพลาดนี้: ผลลัพธ์ความละเอียด NDK: การตั้งค่าโปรเจ็กต์: รุ่น Gradle model = 5.4.1, เวอร์ชัน NDK ไม่ทราบ ฉันเปลี่ยนเวอร์ชัน Gradle ใน build-gradle กลับเป็น 3.4.2 แต่ก็ไม่ได้ช่วยอะไร

4
Java Synchronized Block สำหรับ. class
รหัสจาวาหมายถึงอะไร? จะได้รับการล็อควัตถุทั้งหมดของMyClass? synchronized(MyClass.class) { //is all objects of MyClass are thread-safe now ?? } และโค้ดด้านบนแตกต่างจากโค้ดนี้อย่างไร: synchronized(this) { //is all objects of MyClass are thread-safe now ?? }

18
คำขอซิงโครนัสใน Node.js
หากฉันต้องการเรียกใช้ 3 http API ตามลำดับจะมีทางเลือกอื่นที่ดีกว่าสำหรับโค้ดต่อไปนี้: http.get({ host: 'www.example.com', path: '/api_1.php' }, function(res) { res.on('data', function(d) { http.get({ host: 'www.example.com', path: '/api_2.php' }, function(res) { res.on('data', function(d) { http.get({ host: 'www.example.com', path: '/api_3.php' }, function(res) { res.on('data', function(d) { }); }); } }); }); } }); }); }

6
ลิงก์สัญลักษณ์และโฟลเดอร์ที่ซิงค์ใน Vagrant
ฉันต้องการใช้ Vagrant เพื่อจัดเตรียมสภาพแวดล้อมการพัฒนาร่วมกันให้กับทีมของฉัน โฮสต์แตกต่างกันอย่างสิ้นเชิง: บางคนใช้ OS X, Linux บางตัวและ Windows บางตัว บางคนใช้ VMware บางคนใช้ VirtualBox ภายใน VM เราต้องการเรียกใช้ Linux จนถึงตอนนี้ทุกอย่างเรียบร้อยดี ตอนนี้ความคิดของเราคือนักพัฒนาแต่ละคนจะสามารถใช้ IDE ที่ต้องการได้และด้วยเหตุนี้เราจึงได้แนะนำโฟลเดอร์ที่ซิงค์ซึ่งแชร์ซอร์สโค้ดระหว่างโฮสต์และ VM โดยพื้นฐานแล้วก็ใช้งานได้เช่นกัน ... ยกเว้นลิงก์สัญลักษณ์ ภายในซอร์สโค้ดของเราเรามีลิงก์สัญลักษณ์บางอย่างซึ่งไม่ใช่ปัญหาภายใน Linux ภายใน VM แต่บน Windows ในฐานะโฮสต์จะทำให้เกิดปัญหา สิ่งเดียวที่เราไม่สามารถทำได้คือกำจัดลิงก์สัญลักษณ์ดังนั้นเราจึงต้องการวิธีอื่นในการจัดการกับสิ่งนี้ จนถึงขณะนี้เราได้ลองใช้ตัวเลือกต่างๆมากมาย: มีวิธีแก้ปัญหาที่กล่าวถึงในปัญหาของ Vagrant น่าเสียดายที่นี่เป็น VirtualBox เท่านั้นและไม่ได้ช่วยผู้ที่ใช้ VMware จนถึงตอนนี้เรายังไม่พบวิธีการเรียกใช้โค้ดในVagrantfileขึ้นอยู่กับผู้ให้บริการที่ใช้ แทนที่จะใช้โฟลเดอร์แชร์มาตรฐานตอนนี้เราได้ลองใช้ประเภทrsyncแล้ว สิ่งนี้ใช้ได้กับ Windows แต่เกิดข้อผิดพลาดบน OS X โดยมีข้อผิดพลาดหลายsymlink …

16
รอจนกว่า flag = true
ฉันมีฟังก์ชันจาวาสคริปต์ดังนี้: function myFunction(number) { var x=number; ... ... more initializations //here need to wait until flag==true while(flag==false) {} ... ... do something } ปัญหาคือ javascript ค้างใน while และติดโปรแกรมของฉัน คำถามของฉันคือฉันจะรอตรงกลางของฟังก์ชันจนกว่าแฟล็กจะเป็นจริงโดยไม่ "ไม่ว่างรอ" ได้อย่างไร

5
จะซิงค์กับที่เก็บ Git ระยะไกลได้อย่างไร
ฉันแยกโครงการบน github ทำการเปลี่ยนแปลงบางอย่างจนถึงตอนนี้ดีมาก ในระหว่างนี้ที่เก็บที่ฉันแยกจากการเปลี่ยนแปลงและฉันต้องการรับการเปลี่ยนแปลงเหล่านั้นไปยังที่เก็บของฉัน ฉันจะทำอย่างไร?

1
Loop ไม่เห็นค่าที่เธรดอื่นเปลี่ยนแปลงโดยไม่มีคำสั่งพิมพ์
ในรหัสของฉันฉันมีลูปที่รอให้สถานะบางอย่างเปลี่ยนจากเธรดอื่น เธรดอื่นใช้งานได้ แต่ลูปของฉันไม่เห็นค่าที่เปลี่ยนแปลง มันรอตลอดไป อย่างไรก็ตามเมื่อฉันใส่System.out.printlnคำสั่งในลูปมันก็ใช้งานได้ทันที! ทำไม? ต่อไปนี้เป็นตัวอย่างรหัสของฉัน: class MyHouse { boolean pizzaArrived = false; void eatPizza() { while (pizzaArrived == false) { //System.out.println("waiting"); } System.out.println("That was delicious!"); } void deliverPizza() { pizzaArrived = true; } } ในขณะที่ลูปในขณะทำงานฉันเรียกใช้deliverPizza()จากเธรดอื่นเพื่อตั้งค่าpizzaArrivedตัวแปร แต่การวนซ้ำจะใช้งานได้ก็ต่อเมื่อฉันไม่ใส่System.out.println("waiting");คำสั่ง เกิดอะไรขึ้น?

5
จะทำให้สองโฟลเดอร์ซิงโครไนซ์โดยอัตโนมัติได้อย่างไร?
ฉันต้องการสำเนาที่ซิงโครไนซ์ของโฟลเดอร์เดียวกับแผนผังย่อยทั้งหมด ควรทำงานโดยอัตโนมัติในลักษณะนี้: เมื่อใดก็ตามที่ฉันสร้างแก้ไขหรือลบข้อมูลจากโฟลเดอร์เดิมการเปลี่ยนแปลงเหล่านั้นควรนำไปใช้กับโฟลเดอร์ซิงค์โดยอัตโนมัติ แนวทางใดดีที่สุดสำหรับงานนี้ BTW: ฉันใช้ Ubuntu 12.04 เป้าหมายสุดท้ายคือการมีสำเนาสำรองแบบเรียลไทม์ที่แยกจากกันโดยไม่ต้องใช้ symlinks หรือ mount ฉันใช้ Ubuntu One เพื่อซิงโครไนซ์ข้อมูลระหว่างคอมพิวเตอร์ของฉันและหลังจากนั้นไม่นานก็เกิดข้อผิดพลาดและข้อมูลทั้งหมดของฉันหายไประหว่างการซิงโครไนซ์ ดังนั้นฉันจึงคิดที่จะเพิ่มขั้นตอนต่อไปเพื่อเก็บสำเนาสำรองข้อมูลของฉัน: ฉันเก็บข้อมูลของฉันไว้ใน "โฟลเดอร์ A" ฉันต้องการคำตอบสำหรับคำถามปัจจุบันของฉันเพื่อสร้างการซิงค์ทางเดียวของ "โฟลเดอร์ A" กับ "โฟลเดอร์ B" ( cronสคริปต์ที่มีrsync? อาจเป็น?) ฉันต้องการให้มันเป็นแบบทางเดียวเท่านั้นจาก A ถึง B การเปลี่ยนแปลงใด ๆ กับ B จะต้องไม่ใช้กับ A ฉันเพียงแค่ให้ "โฟลเดอร์ B" ที่ซิงโครไนซ์กับ Ubuntu One ในลักษณะนี้การเปลี่ยนแปลงใด ๆ ใน A จะถูกนำไปใช้กับ …

8
ฉันจะทำให้ ArrayList Thread-Safe ได้อย่างไร แนวทางอื่นในการแก้ปัญหาใน Java?
ฉันมี ArrayList ที่ฉันต้องการใช้เพื่อเก็บวัตถุ RaceCar ที่ขยายคลาสเธรดทันทีที่ดำเนินการเสร็จสิ้น คลาสที่เรียกว่า Race จะจัดการ ArrayList นี้โดยใช้วิธีการเรียกกลับที่อ็อบเจ็กต์ RaceCar เรียกใช้เมื่อดำเนินการเสร็จสิ้น วิธีการโทรกลับ addFinisher (RaceCar finisher) เพิ่มวัตถุ RaceCar ไปยัง ArrayList สิ่งนี้ควรจะให้ลำดับที่เธรดดำเนินการเสร็จสิ้น ฉันรู้ว่า ArrayList ไม่ซิงโครไนซ์ดังนั้นจึงไม่ปลอดภัยต่อเธรด ฉันลองใช้เมธอด Collections.synchronizedCollection (c Collection) โดยส่ง ArrayList ใหม่และกำหนด Collection ที่ส่งคืนไปยัง ArrayList อย่างไรก็ตามสิ่งนี้ทำให้ฉันมีข้อผิดพลาดของคอมไพเลอร์: Race.java:41: incompatible types found : java.util.Collection required: java.util.ArrayList finishingOrder = Collections.synchronizedCollection(new ArrayList(numberOfRaceCars)); นี่คือรหัสที่เกี่ยวข้อง: public class …

7
บล็อกที่ซิงโครไนซ์ Java เทียบกับ Collections.synchronizedMap
รหัสต่อไปนี้ตั้งค่าเพื่อซิงโครไนซ์การโทรอย่างถูกต้องsynchronizedMapหรือไม่? public class MyClass { private static Map<String, List<String>> synchronizedMap = Collections.synchronizedMap(new HashMap<String, List<String>>()); public void doWork(String key) { List<String> values = null; while ((values = synchronizedMap.remove(key)) != null) { //do something with values } } public static void addToMap(String key, String value) { synchronized (synchronizedMap) { if (synchronizedMap.containsKey(key)) { …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.