小段大帅 2017-06-08 17:47 采纳率: 0%
浏览 1953

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);
    }
}
  • 写回答

7条回答 默认 最新

  • 龙猫12138 2017-06-08 17:55
    关注

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

    评论
  • 柠檬拌饭 2017-06-08 18:00
    关注

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

    评论
  • sinat_38913556 2017-06-08 18:02
    关注

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

    评论
  • 丵鹰 2017-06-08 18:14
    关注
     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);
            }
        }
    

    展开全部

    评论
  • David_Hymn 2017-06-08 18:31
    关注

    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);
    }
    

    }

    展开全部

    评论
  • 伪墨 2017-06-08 18:32
    关注

    楼上正解~用sleep和join

    评论
  • 没伞的孩子只能跑 2017-06-08 19:11
    关注

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

    评论
编辑
预览

报告相同问题?

悬赏问题

  • ¥15 PADS Logic 原理图
  • ¥15 PADS Logic 图标
  • ¥15 电脑和power bi环境都是英文如何将日期层次结构转换成英文
  • ¥20 气象站点数据求取中~
  • ¥15 如何获取APP内弹出的网址链接
  • ¥15 wifi 图标不见了 不知道怎么办 上不了网 变成小地球了
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部