मैं जावा के लिए नया हूँ और मैं एक समवर्ती प्रोग्रामिंग पाठ्यक्रम में भाग लेने रहा हूँ के बीच एक वस्तु साझा करना। मैं बेहद कम काम करने वाला उदाहरण प्राप्त करने की कोशिश कर रहा हूं जो 'सिंक्रनाइज़' कीवर्ड का उपयोग करने और थ्रेड में ऑब्जेक्ट साझा करने जैसी अवधारणाओं को प्रदर्शित करने में मदद कर सकता है। खोज रहे हैं, लेकिन बुनियादी ढांचा नहीं मिल सका। जावा प्रोग्रामर, कृपया मदद करें।दो धागे और मुख्य कार्यक्रम
9
A
उत्तर
4
यहां दो धागे के बीच एक सरणी साझा करने का एक बहुत ही शॉट उदाहरण है। आम तौर पर आप सभी शून्य देखेंगे, लेकिन कभी-कभी चीजें खराब हो जाती हैं और आप अन्य नंबर देखते हैं।
final int[] arr = new int[100];
Thread one = new Thread() {
public void run() {
// synchronized (arr) {
for (int i = 0; i < arr.length * 100000; i++) {
arr[i % arr.length]--;
}
// }
}
};
Thread two = new Thread() {
public void run() {
// synchronized (arr) {
for (int i = 0; i < arr.length * 100000; i++) {
arr[i % arr.length]++;
}
//}
}
};
one.start();
two.start();
one.join();
two.join();
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
लेकिन, यदि आप पाशन आप हमेशा प्रिंट आउट में सभी 0
रों देखेंगे आसपास arr
पर सिंक्रनाइज़ करें। यदि आप सिंक्रनाइज़ किए गए ब्लॉक को अनमोल करते हैं, तो कोड बिना त्रुटि के चलाएगा।
7
एक साधारण उदाहरण। आशा है कि आप फुटबॉल (या फुटबॉल) पसंद करेंगे। :)
public class Game {
public static void main(String[] args) {
Ball gameBall = new Ball();
Runnable playerOne = new Player("Pasha", gameBall);
Runnable playerTwo = new Player("Maxi", gameBall);
new Thread(playerOne).start();
new Thread(playerTwo).start();
}
}
public class Player implements Runnable {
private final String name;
private final Ball ball;
public Player(String aName, Ball aBall) {
name = aName;
ball = aBall;
}
@Override
public void run() {
while(true) {
ball.kick(name);
}
}
}
public class Ball {
private String log;
public Ball() {
log = "";
}
//Removing the synchronized keyword will cause a race condition.
public synchronized void kick(String aPlayerName) {
log += aPlayerName + " ";
}
public String getLog() {
return log;
}
}
संबंधित मुद्दे
- 1. मुख्य थ्रेड निकास पर कार्यक्रम की समाप्ति?
- 2. Quine कार्यक्रम मुख्य()
- 3. मुख्य कार्यक्रम और साझा लाइब्रेरी __static_initialization_and_destruction_0
- 4. गैर-मुख्य धागे
- 5. पृष्ठभूमि, अग्रभूमि और मुख्य धागे क्या हैं?
- 6. मुख्य कतार/मुख्य धागे पर CoreBluetooth प्रतिनिधि?
- 7. थ्रेडिंग, दो धागे सी #
- 8. कार्यक्रम
- 9. मुख्य वर्ग नहीं मिल सका, कार्यक्रम
- 10. pygtk दो खिड़कियां, पॉपअप और मुख्य
- 11. धागे से मुख्य धागे तक अपवाद भेज रहा है?
- 12. मुख्य धागे में धागे में unhandled अपवाद उठाओ?
- 13. किसी अन्य धागे से मुख्य धागे में कोड चलाना
- 14. URLForUbiquityContainerIdentifier: मुख्य धागे के बाहर धागे में बुलाया जाना चाहिए?
- 15. किसी अन्य धागे से मुख्य धागे पर रन विधि
- 16. आईओएस semaphore_wait_trap मुख्य धागे पर यूआई
- 17. जावा - मुख्य धागे पर वापस स्विचिंग?
- 18. धागे "मुख्य" java.io.FileNotFoundException में अपवाद: त्रुटि
- 19. वृक्ष संरचनाएं और धागे
- 20. बच्चे धागे पूर्ण निष्पादन से पहले मुख्य धागा निकास होगा?
- 21. पृष्ठभूमिवर्कर और मुख्य थ्रेड
- 22. जावा में धागे के भीतर धागे?
- 23. सी दो दिनों के बीच कार्यक्रम दिन
- 24. अपवाद संचालन जब त्रुटियों मुख्य कार्यक्रम में या सफाई
- 25. जावा: मुख्य कार्यक्रम/कक्षा से अलग थ्रेड कैसे चलाएं?
- 26. मुख्य धागे भूख से बचने के लिए कैसे?
- 27. कार्यक्रम प्रविष्टि बिंदु के लिए नाम 'मुख्य' की उत्पत्ति?
- 28. आईफोन 3 जीएस पर 100% सीपीयू का उपभोग करने वाले पृष्ठभूमि धागे गुप्त मुख्य धागे
- 29. दो धागे रोकें एक ही मूल्य
- 30. Process.waitFor(), धागे, और InputStreams
आप केवल वृद्धि और कमी लाइनों के लिए 'arr' पर सिंक्रनाइज़ करके त्रुटियों से छुटकारा पा सकते हैं: http://pastebin.com/vN4E527P यह इस तथ्य को रेखांकित करता है कि केवल थ्रेड-असुरक्षित भाग उन दो पंक्तियां हैं। –
कभी-कभी मुझे यादृच्छिक संख्याओं की एक स्ट्रिंग मिल रही है। मैं हैरान हूँ। क्या आप कृपया कामकाज की व्याख्या कर सकते हैं? – devnull
एआर [i% arr.length] - और arr [i% arr.length] ++ संतुलन नहीं करना चाहिए क्योंकि इसे समान संख्या में निष्पादित किया जा रहा है? दूसरे शब्दों में नतीजा हमेशा शून्य नहीं होना चाहिए? – devnull