java多线程执行顺序问题

怎么让以下代码是按顺序输出的?

public class Main3 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        new MyThread(1).start();
        new MyThread(2).start();
        new MyThread(3).start();
        new MyThread(4).start();
        new MyThread(5).start();
        new MyThread(6).start();
        new MyThread(7).start();
    }

}

class MyThread extends Thread {

    private int i = 0;

    public MyThread(int i){
        this.i = i;
    }

    @Override
    public void run() {
        System.out.println(i);
    }
}

用join()函数?
MyThread my = new MyThread(1)
my.start();
my.join() ;

for(int i=1;i<7;i++){
new MyThread(i).start();
}
利用循环不可以嘛

线程合并 但是你这个例子太快了 看不出来

 public class Main3 {


        public static void main(String[] args) throws InterruptedException {
            // TODO Auto-generated method stub
            new MyThread(1).start();
            new MyThread(1).sleep(100);
            new MyThread(2).start();
            new MyThread(2).sleep(100);
            new MyThread(3).start();
            new MyThread(3).sleep(100);
            new MyThread(4).start();
            new MyThread(4).sleep(100);
            new MyThread(5).start();
            new MyThread(5).sleep(100);
            new MyThread(6).start();
            new MyThread(6).sleep(100);
            new MyThread(7).start();
            new MyThread(7).sleep(100);
        }

    }

    class MyThread extends Thread {

        private int i = 0;

        public MyThread(int i){
                this.i = i;
        }

        @Override
        public synchronized void run() {
            System.out.println(i);
        }
    }

public class Main3 {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    Thread t1 =  new MyThread(1);
    Thread t2 =  new MyThread(2);
    Thread t3 =  new MyThread(3);
    Thread t4 =  new MyThread(4);
    Thread t5 =  new MyThread(5);
    Thread t6 =  new MyThread(6);
    Thread t7 =  new MyThread(7);
             t1.start();
           t1.join();
             t2.start();
           t2.join();
           t3.start();
           t3.join();
           t4.start();
         t4.join();
           t5.start();
         t5.join();
         t6.start();
           t6.join();
         t7.start();
         t7.join();
}

}

class MyThread extends Thread {

private int i = 0;

public MyThread(int i){
    this.i = i;
}

@Override
public void run() {
             try {
                    Thread.sleep(50);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
    System.out.println(i);
}

}

楼上正解~用sleep和join

为什么使用多线程还要保证执行顺序呢?多线程在运行的时候有专门的机制来分配时间戳,所以楼上那些让线程sleep的方法不一定能保证顺序,因为在
分配的时间里,一个线程可能没执行完,但是时间到了依然要释放cpu资源。如果非要按照你说的顺序来执行,有一个办法是肯定可行的,那就是锁,让
后一个线程等待前一个线程的资源锁。以上仅代表个人观点。