может кто-нибудь сказать мне заказ, в котором поток начинает выполнять ?. Я написал следующий кодПолучение различного порядка нитей даже при запуске моей программы
class NewThread implements Runnable {
Thread t;
NewThread() {
//creating a second thread.
t=new Thread(this,"Demo Thread");
System.out.println("Child Thread:"+t);
t.start();
}
public void run() {
try {
for(int i=0;i<5;i++) {
System.out.println("Child Thread:"+i);
Thread.sleep(3000);
}
} catch(Exception e) {
System.out.println(e.getLocalizedMessage());
}
System.out.println("Exiting Child Thread");
}
}
и это
public class ThreadDemo {
public static void main(String args[]) {
new NewThread();
try {
for(int i=0;i<5;i++) {
System.out.println("Main Thread:"+i);
Thread.sleep(3000);
}
} catch(Exception e) {
System.out.println(e.getLocalizedMessage());
}
System.out.println("Exiting Main Thread");
}
}
, когда я выполняю этот код, я получаю много различных наборов продукции.
Child Thread:Thread[Demo Thread,5,main]
Main Thread:0
Child Thread:0
Child Thread:1
Main Thread:1
Main Thread:2
Child Thread:2
Main Thread:3
Child Thread:3
Main Thread:4
Child Thread:4
Exiting Main Thread
Exiting Child Thread
другой,
Child Thread:Thread[Demo Thread,5,main]
Main Thread:0
Child Thread:0
Child Thread:1
Main Thread:1
Child Thread:2
Main Thread:2
Child Thread:3
Main Thread:3
Child Thread:4
Main Thread:4
Exiting Child Thread
Exiting Main Thread
Почему это происходит? Будет ли порядок нитей никогда не быть таким же? и было бы неплохо, если бы кто-то мог дать мне указания на основы потоков и примеры. P.S: Я новичок в потоках, и это моя первая программа для потоков. Заранее спасибо.
Никто не может. Это потоки. Они работают одновременно. Если вам требуется последовательное выполнение, зачем использовать потоки? – EJP
Он не контролирует вашу программу, и вы не можете предсказать заказ. –
Короткий ответ заключается в том, что он не определен. Но это сложный и большой предмет, и ни один из них не подходит для обучения по частям на SO. Я бы рекомендовал получить копию JCIP. – yshavit