Multithreading
Multithreading क्या है
Multithreading program को कई काम एक साथ चलाने देता है, हर एक अपने thread में। एक बार में एक चीज़ करने के बजाय, program, उदाहरण के लिए, data download करते हुए भी user को respond कर सकता है। Java में threads बनाने और चलाने का built-in support है।
Thread बनाना (Thread)
class MyThread extends Thread {
public void run() {
System.out.println("Thread running");
}
}
// इस्तेमाल:
MyThread t = new MyThread();
t.start(); // नया thread शुरू करता है
एक तरीका है Thread extend करके run() को चलाने वाले code से override करना। start() call करना नया thread launch करता है जो run() चलाता है।
Thread बनाना (Runnable)
class MyTask implements Runnable {
public void run() {
System.out.println("Task running");
}
}
// इस्तेमाल:
Thread t = new Thread(new MyTask());
t.start();
बेहतर तरीका है Runnable implement करके उसे Thread को भेजना। यह आपकी class को दूसरी class extend करने को स्वतंत्र रखता है, क्योंकि यह Thread पर inheritance इस्तेमाल नहीं करता।
run बनाम start
MyThread t = new MyThread(); t.run(); // गलत: मौजूदा thread पर चलता है, कोई नया thread नहीं t.start(); // सही: नया thread शुरू करता है, फिर run() चलाता है
यह classic गलती है। start() नया thread बनाकर उस पर run() call करता है। सीधे run() call करना बस code सामान्य रूप से चलाता है, बिल्कुल कोई concurrency नहीं।
Thread lifecycle
- New — बना पर शुरू नहीं।
- Runnable —
start()के बाद, चलने को तैयार। - Running — सक्रिय रूप से
run()चला रहा। - Blocked/Waiting — रुका, resource या signal का इंतज़ार।
- Terminated —
run()ख़त्म होने पर पूरा।
Threads क्यों इस्तेमाल करें
- Responsiveness — task background में चलते हुए UI काम करता रहे।
- Speed — multi-core CPUs पर स्वतंत्र tasks समानांतर करना।
- Efficiency — इंतज़ार समय (जैसे network देरी) को दूसरे काम को इस्तेमाल करना।
Threads शक्तिशाली हैं, पर उनके बीच साझा data को सावधानी चाहिए — synchronization देखिए।
आम गलतियाँ
start()के बजायrun()call करना। तब कोई नया thread नहीं बनता।- दूसरी class extend करनी हो तब Thread extend करना। इसके बजाय Runnable इस्तेमाल कीजिए।
- Synchronization बिना data साझा करना। यह threads के बीच data corrupt कर सकता है।
- Fixed order की उम्मीद। Threads स्वतंत्र चलते हैं; order पक्का नहीं।
सारांश
- Multithreading कई tasks एक साथ चलाता है, हर एक thread में।
- Threads Thread extend करके या Runnable implement करके बनाइए।
- Runnable बेहतर ताकि आपकी class फिर भी दूसरी extend कर सके।
- नया thread launch करने को
start()इस्तेमाल कीजिए,run()नहीं। - Thread New → Runnable → Running → (wait) → Terminated से गुज़रता है।
आगे, साझा data की रक्षा कीजिए synchronization से, या tasks compact लिखिए lambda expressions से।
अक्सर पूछे जाने वाले प्रश्न (FAQ)
Java में multithreading क्या है?
Thread बनाने के दो तरीके क्या हैं?
Thread class extend करके run() override कर सकते हैं, या Runnable interface implement करके उसे Thread को भेज सकते हैं। Runnable आमतौर पर बेहतर है क्योंकि यह आपकी class को कुछ और extend करने को स्वतंत्र छोड़ता है।run() और start() में क्या अंतर है?
start() नया thread बनाता है और फिर उस पर run() चलाता है, तो यह concurrently चलता है। सीधे run() call करना बस मौजूदा thread पर code चलाता है, कोई नया thread नहीं — आम गलती।