Akshit Gupta Ответов: 1

Поток Java не работает одновременно


У меня есть код для выполнения потоков на Java.. Но потоки не работают одновременно.. Вот этот код..

class Abc {

    public static void main(String[] ar){
        Mythread mt = new Mythread();
            mt.start();
            Mythread mt1 = new Mythread();
            mt1.start();
    }
}
class Mythread extends Thread{
    public void run(){
        for(int i = 0; i<= 9; i++){
            System.out.println(Thread.currentThread().getId() + " " + i);
        }
        try{
            Thread.sleep(1000);
        }
        catch(InterruptedException iex){

        }
    }
}

Я ожидаю, что результат будет таким:
типа id1 0
ID2, которое 0
id1 в 1
ID2, которое 1
id1 в 2
ID2, которое 2
id1 в 3
ID2, которое 3
id1 в 4
ID2, которое 4
id1 в 5
ID2, которое 5
id1 в 6
ID2, которое 6
id1 в 7
ID2, которое 7
id1 в 8
ID2, которое 8
id1 в 9
ID2, которое 9

Но я получаю случайную последовательность выходных данных..Пожалуйста, укажите, что я делаю не так!

Что я уже пробовал:

Реализация параллельных Javathreads

Ziee-M

Ну вот именно так и должны функционировать потоки, если бы у вас был вывод, подобный тому, который вы опубликовали, то возникла бы проблема.
Есть так много замечательных статей о потоковой передаче в CodeProject, просто найдите и прочитайте несколько из них.

CPallini

Мой (виртуальный) 5.

Ziee-M

Спасибо CPalliani :)

1 Ответов

Рейтинг:
11

vishaljamdagni

Эй там,
Дело с потоками в java заключается в том, что планировщик потоков может делать все, что ему заблагорассудится, если вы не используете специальные функции, такие как join (), wait() и т. д. Даже метод yield() не гарантированно запускается каждый раз, когда вы его вызываете, потому что это скорее запрос типа a, и именно поэтому вы не можете зависеть от него.
Итак, результат, которого вы ожидали, таков один из возможных выходов но это ни в коем случае не единственное, что вы получите. Но это не означает, что ваши потоки не выполняются одновременно.
Надеюсь, это поможет.
Овации.