解决方案 »

  1.   

    1、那你就干脆顺序执行呗,这样最简单了。
    2、非要用线程的话可以用wait和notify方法,设置一个锁对象,让1在结束的时候调用锁的notify方法,让2在开始的时候调用wait方法。建议你在网上找找这两个方法的例子,很多的,先看看。
      

  2.   


    用wait 的话  怎么确定wait的等待时间呀呢
      

  3.   

    在循环的末尾休眠1秒以防没有顺序执行线程,即
    public static void main(String[] args) {
    for(int i = 0 ;i<5 ;i++){
    if(0 == i){
    new MyThread1().start();
    }else if(1 ==i){
    new MyThread2().start();
    }else if(2 ==i){
    new MyThread3().start();
    }else if(3 ==i){
    new MyThread4().start();
    }else if(4 ==i){
    new MyThread5().start();
    }
    Thread.sleep(1000);
    }
    }
    补充 楼上的说法不行的,用wait notify的话 那就是单线程了,没有起到并发效果
      

  4.   

    countdownlatch用起来很简单 可以深入研究一下
      

  5.   


    用wait 的话  怎么确定wait的等待时间呀呢
    不需要确定等待时间,到时候线程1运行完了会调用notify通知的。http://blog.csdn.net/zyplus/article/details/6672775 供你参考。这个说法完全不对。也是没有理解多线程。
      

  6.   


    好吧,我承认我之前没看清楼主的意图,但是我不知道这样顺序执行线程有什么用?为什么不在main里顺序调用run()方法,当成普通方法调用就行了,开线程有什么用? 呵呵,也不知道谁没理解多线程。
      

  7.   


    好吧,我承认我之前没看清楼主的意图,但是我不知道这样顺序执行线程有什么用?为什么不在main里顺序调用run()方法,当成普通方法调用就行了,开线程有什么用? 呵呵,也不知道谁没理解多线程。我告诉楼主用不着多线程,单线程就行了,他不同意,非要用多线程,那我就只好告诉他多线程怎么弄咯。我说你没理解不是指没理解楼主,而是你post的这段代码:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    public static void main(String[] args) {
    for(int i = 0 ;i<5 ;i++){
    if(0 == i){
    new MyThread1().start();
    }else if(1 ==i){
    new MyThread2().start();
    }else if(2 ==i){
    new MyThread3().start();
    }else if(3 ==i){
    new MyThread4().start();
    }else if(4 ==i){
    new MyThread5().start();
    }
    Thread.sleep(1000);
    }
    }你加的Thread.sleep(1000);其实没有用处,起不到任何作用,达不到多个线程之间协调运行的作用,所以我说你没理解清楚。
      

  8.   


    我刚开始以为楼主的意思是后续的线程不能先于前面的线程运行,就加了sleep 1秒,这样应该是可以的。比如说 保证mythread2不会在mythread1前面运行
      

  9.   

    虽然没看懂楼主什么意图,但下面代码可以实现:public static void main(String[] args) {
    for(int i = 0 ;i<5 ;i++){
    if(0 == i){
    MyThread1 t1 = new MyThread1();
    t1.start();
    t1.join();
    }else if(1 ==i){
    MyThread2 t2 = new MyThread2();
    t2.start();
    t2.join();
    }else if(2 ==i){
    MyThread3 t3 = new MyThread3();
    t3.start();
    t3.join();
    }else if(3 ==i){
    MyThread4 t4 = new MyThread4();
    t4.start();
    t4.join();
    }else if(4 ==i){
    MyThread5 t5 = new MyThread5();
    t5.start();
    t5.join();
    }
    }
    }
      

  10.   


    package executortest;import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;public class Exetest {
    private static final ExecutorService EXECUTOR = Executors.newSingleThreadExecutor();
    public static void main(String[] args) {
    for(int i =0;i<5;i++){
    EXECUTOR.execute(new MyRun("thread"+i));
    }
    EXECUTOR.shutdown();
    }
    }
    class MyRun implements Runnable{
    private String name;

    public MyRun(String name) {
    this.name = name;
    } @Override
    public void run() {
    try {
    long l = (long) (Math.random()*1000);
    Thread.sleep(l);
    System.out.println("----------------------"+name+"--------耗时:"+l);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }

    }
    }
      

  11.   

    楼主既然是按顺序执行不需要多线程哦,不要在if里面启动new Thread().start()直接调用业务方法就行