समस्या का वर्णन: -प्रतीक्षा पूरा: जावा
चरण 1: मुख्य थ्रेड पर उपयोगकर्ता से इनपुट FILE_NAME लो।
चरण 2: उस फ़ाइल पर 10 संचालन करें (यानी अक्षर गिनें, गिनती लाइन आदि ..), और उन सभी 10 संचालन सेप्टेट थ्रेड में होना चाहिए। इसका मतलब है कि 10 बच्चे धागे होना चाहिए।
चरण 3: मुख्य धागा तब तक प्रतीक्षा करता है जब तक कि उन सभी बच्चे धागे पूरा नहीं हो जाते।
चरण 4: प्रिंट परिणाम।
मैं क्या किया: -
मैं 3 धागे के साथ एक नमूना कोड किया था। मैं आपकी तरफ से फाइल ऑपरेशन कोड नहीं चाहता हूं।
public class ThreadTest {
// This is object to synchronize on.
private static final Object waitObject = ThreadTest.class;
// Your boolean.
private static boolean boolValue = false;
public final Result result = new Result();
public static void main(String[] args) {
final ThreadTest mytest = new ThreadTest();
System.out.println("main started");
new Thread(new Runnable() {
public void run() {
System.out.println("Inside thread");
//Int initialiser
new Thread(new Runnable() {
public void run() {
System.out.println("Setting integer value");
mytest.result.setIntValue(346635);
System.out.println("Integer value seted");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();
//String initialiser
new Thread(new Runnable() {
public void run() {
System.out.println("Setting string value");
mytest.result.setStringValue("Hello hi");
System.out.println("String value seted");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();
//Boolean initialiser
new Thread(new Runnable() {
public void run() {
System.out.println("Setting boolean value");
mytest.result.setBoolValue(true);
System.out.println("Boolean value seted");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();
System.out.println("Thread is finished");
//Notify to main thread
synchronized (ThreadTest.waitObject) {
ThreadTest.boolValue = true;
ThreadTest.waitObject.notifyAll();
}
}
}).start();
try {
synchronized (ThreadTest.waitObject) {
while (!ThreadTest.boolValue) {
ThreadTest.waitObject.wait();
}
}
} catch (InterruptedException ie) {
ie.printStackTrace();
}
System.out.println("main finished");
System.out.println("Result is : " + mytest.result.toString());
}
}
समस्या: -
मेरे ऊपर कोड सही जवाब देने नहीं है। मैं उसे कैसे कर सकता हूँ?
वैकल्पिक समाधान:
CountDownLatch वर्ग ही करता है। लेकिन मैं उस वर्ग का उपयोग नहीं करना चाहता।
मैंने this similar solution देखा और मैं केवल थ्रेड के तरीकों का उपयोग करना चाहता हूं।
थ्रेड के .join() विधि के बारे में पढ़ें। – shift66
यदि यह होमवर्क है तो आपको इसे अगली बार कचरा करना चाहिए। – Voo