запускать поток один за другим без использования join () в java

Я новичок в потоке в java, у меня есть небольшое представление о потоке, скажем, у меня есть 10 потоков, и я запускаю его один за другим, как это

public class BaseRunnable implements Runnable {
    String ThreadNo;
    public  BaseRunnable(String ThreadNo) {
        // TODO Auto-generated constructor stub
        this.ThreadNo=ThreadNo;
    }

    @Override
    public void run() {
        // TODO Auto-generated method stub

        for(int i=0;i<50;i++)
        {
             System.out.println("Thread no "+ThreadNo+"  Running with index > "+i);
        }
    }
}

И в основном Меторд

BaseRunnable runnable=new BaseRunnable("1");//run on main thread
BaseRunnable runnableTwo=new BaseRunnable("2");//run on main thread
BaseRunnable runnable3=new BaseRunnable("3");//run on main thread
BaseRunnable runnable4=new BaseRunnable("4");//run on main thread
BaseRunnable runnabl5=new BaseRunnable("5");//run on main thread
BaseRunnable runnable6=new BaseRunnable("6");//run on main thread
BaseRunnable runnable7=new BaseRunnable("7");//run on main thread
BaseRunnable runnable8=new BaseRunnable("8");//run on main thread


Thread one=new Thread(runnable);
Thread two=new Thread(runnableTwo);
Thread thr3=new Thread(runnable3);
Thread thr4=new Thread(runnable4);
Thread thr5=new Thread(runnabl5);
Thread thr6=new Thread(runnable6);
Thread thr7=new Thread(runnable7);
Thread thr8=new Thread(runnable8);

one.start();
two.start();
thr3.start();
thr4.start();
thr5.start();
thr6.start();
thr7.start();
thr8.start();

Я знаю, что если я использую join(), я могу запускать нитки один за другим (one.start(); one.join();)

Я пробую другой способ, используя synchronized, который заставлял запускать один поток один за другим, но это было не по порядку, поэтому любой эксперт поможет мне активировать это, например, сначала Thread one, Thread 2 и т. Д. Без join()

Пожалуйста, рассмотрите это как вопрос новичка, помогите пожалуйста


person Samwinishere Here    schedule 25.05.2017    source источник
comment
Если есть несколько задач, которые нужно выполнить, но эти задачи должны выполняться в определенном порядке, а следующая задача не может быть запущена до тех пор, пока предыдущая задача не будет завершена, то почему вы вообще пытаетесь использовать потоки? Расскажите подробнее о том, что вы пытаетесь сделать.   -  person Andrew S    schedule 25.05.2017
comment
Я тестирую и изучаю ветку, недавно я получил вопрос на собеседовании, чтобы добиться этого, поэтому я начал выяснять, как это сделать. Пожалуйста, считайте учащимся. Спасибо   -  person Samwinishere Here    schedule 25.05.2017
comment
Вы помните точный вопрос интервью? Это действительно то же самое, что и ваш опубликованный вопрос? Это устарело, но все еще применяется .   -  person Andrew S    schedule 25.05.2017
comment
Не следует запускать темы вручную. Взгляните на Executors.   -  person Miha_x64    schedule 26.05.2017


Ответы (1)


Достичь цели можно таким образом:

        List<BaseRunnable> list = new ArrayList<>();
        for (int i = 0; i < 8; i++) {
            list.add(new BaseRunnable(Integer.toString(i)));
        }

        for (BaseRunnable baseRunnable : list) {
            Thread thread = new Thread(baseRunnable);
            thread.start();
            while (thread.isAlive()) {
                Thread.sleep(10);
            }
        }
person Oleg Sokolov    schedule 06.06.2017