इस कोड है:"थ्रेड.current थ्रेड()। GetName" और "this.getName" के बीच क्या अंतर है?
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory;
class UnCatchExceptionThread extends Thread{
public UnCatchExceptionThread(String name){
this.setName(name);
}
@Override
public void run() {
System.out.println("Thread name is: " + this.getName());
throw new RuntimeException();
}
}
class UnCatchExceptionHandler implements Thread.UncaughtExceptionHandler{
@Override
public void uncaughtException(Thread t, Throwable e) {
System.out.println("catch " + e + " from " + t.getName());
}
}
class HandlerFactory implements ThreadFactory{
@Override
public Thread newThread(Runnable r) {
Thread t = new Thread(r);
t.setUncaughtExceptionHandler(new UnCatchExceptionHandler());
return t;
}
}
public class CaptureException {
public int i;
/**
* @param args
*/
public static void main(String[] args) {
ExecutorService exec = Executors.newCachedThreadPool(new HandlerFactory());
exec.execute(new UnCatchExceptionThread("Gemoji"));
}
}
और उत्पादन होता है:
थ्रेड नाम है: Gemoji
थ्रेड-1
से तो पकड़ java.lang.RuntimeException मैं कोड
System.out.println("Thread name is: " + this.getName());
बदल गया
System.out.println("Thread name is: " + Thread.currentThread().getName());
के उत्पादन
थ्रेड नाम करने के लिए बदल जाएगा: थ्रेड-1 थ्रेड-1
क्यों से
पकड़ java.lang.RuntimeException?
मैं भूल जाता हूं कि 'थ्रेडफैक्टरी' को 'रननेबल' को सर्वो के रूप में स्वीकार किया जाता है, और 'थ्रेड' भी 'रननेबल' लागू करता है। आपकी सहायता के लिए धन्यवाद. – PeaceMaker