/ / जावा प्रीमेप्टिव है? - जावा, मल्टीथ्रेडिंग, थ्रेड-प्राथमिकता, प्रीमेप्टिव

जावा प्रीपेप्टिव है? - जावा, मल्टीथ्रेडिंग, थ्रेड-प्राथमिकता, प्रीemptive

मैंने इस प्रश्न के कई उत्तर देखे हैं लेकिन मुझे अभी भी यकीन नहीं है।

उनमें से एक था "जावा प्रीमेक्टिव है"। (JVM शेड्यूलिंग, प्रायोरिटी बेस्ड शेड्यूलिंग एल्गोरिथ्म (आमतौर पर राउंड रॉबिन अल्गोरिद्म) का उपयोग करके शेड्यूल करता है।

दूसरा यह था कि यदि एक ही प्राथमिकता वाले जावा के साथ 2 थ्रेड्स पूर्वनिर्मित नहीं होंगे और एक धागा भूखा रह सकता है।

इसलिए अब मैंने इसे जांचने के लिए एक कार्यक्रम लिखा, मैंन्यूनतम प्राथमिकता के साथ 10 धागे बनाए अधिकतम प्राथमिकता के साथ 10 धागे के बाद, परिणाम यह था कि मैं सभी थ्रेड्स के बीच कूदता हूं - जिसका अर्थ है कि जावा प्रीमेप्टिव है भले ही 2 धागे एक ही प्राथमिकता के साथ हों

 /*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package javaapplication1;

import java.util.logging.Level;
import java.util.logging.Logger;

/**
*
* @
*/
public class JavaApplication1 {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {

for (int i=0;i<10;i++){
Thread t=new Thread(new Dog(i));
t.setPriority(Thread.MIN_PRIORITY);
t.start();
}

try {
Thread.sleep(5000);
} catch (InterruptedException ex) {
Logger.getLogger(JavaApplication1.class.getName()).log(Level.SEVERE, null, ex);
}
for (int i = 0; i < 10; i++) {
Thread g = new Thread(new Dog(i+10));
g.setPriority(Thread.MAX_PRIORITY);
g.start();
}

}
}

टी

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package javaapplication1;

/**
*
* @author Matan2t
*/
public class Dog implements Runnable{
public int _x=-1;
public Dog(int x){
_x=x;
}
@Override
public void run(){
while(true){
System.out.println("My Priority Is : " + _x);
}
}

}

उत्तर:

जवाब के लिए 9 № 1

मुझे विश्वास नहीं होता कि यह दोनों उद्धरणों में से किसी एक का सुझाव देने के समान है था:

हर धागे की प्राथमिकता होती है। उच्च प्राथमिकता वाले थ्रेड्स को प्राथमिकता के साथ कम प्राथमिकता वाले थ्रेड्स में निष्पादित किया जाता है। जब किसी थ्रेड में चलने वाला कोड एक नया थ्रेड ऑब्जेक्ट बनाता है, तो नए थ्रेड की प्राथमिकता प्राथमिक रूप से सेटिंग थ्रेड की प्राथमिकता के बराबर होती है।

इसके अलावा, मेरा मानना ​​है कि यांत्रिकी मंच हैं और जेवीएम-विशिष्ट। जिन प्लेटफार्मों से मैं परिचित हूं, उन पर JVM OS थ्रेड्स का उपयोग करता है और इस प्रकार OS अनुसूचक पर निर्भर करता है।

यह कहा गया है, यह देखते हुए कि डिफ़ॉल्ट रूप से सभी एप्लिकेशन थ्रेड्स की प्राथमिकता समान है, यह अविश्वसनीय रूप से असुविधाजनक होगा यदि वे धागे एक दूसरे को प्रीमेच करने में सक्षम नहीं थे।