【问题标题】:Starting a lengthy operation in a different thread freezes execution in the current one [duplicate]在另一个线程中开始一个冗长的操作会冻结当前线程中的执行[重复]
【发布时间】:2014-10-16 19:03:44
【问题描述】:

要么我真的不了解多线程,要么发生了一些奇怪的事情。

我有以下代码:

public void playMusic(){
    new Thread(new Runnable(){
        public void run(){
            tune.play();
        }
    }).run();
    System.out.println("*******");
}

此方法播放一段音乐。它启动一个新线程并在那里播放音乐,而不是暂停当前线程的执行。

因此,我希望 System.out.println("*********"); 在调用该方法时几乎立即执行,因为冗长的操作 tune.play() 是在不同的线程上调用的。

但实际上********* 仅在音乐结束时才会打印到屏幕上。

你怎么解释这个?以及如何将音乐播放与当前线程分开?

如果有区别,“当前线程”就是 Swing EDT。

【问题讨论】:

    标签: java multithreading


    【解决方案1】:

    这不是你开始新话题的方式。

    应该是:

    public void playMusic(){
        new Thread(new Runnable(){
            public void run(){
                tune.play();
            }
        }).start();
        System.out.println("*******");
    }
    

    调用你创建的Threadrun方法会在当前线程上执行。

    【讨论】:

    • Ohhhhhhh...有趣的东西:)
    【解决方案2】:

    你没有启动线程,你只是在它上面调用了run,所以它在你当前的线程中执行。 Call start to start the thread 代替。改变

    }).run();
    

    }).start();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-12
      • 1970-01-01
      • 2011-04-19
      • 1970-01-01
      • 2023-04-06
      • 2016-12-15
      • 1970-01-01
      相关资源
      最近更新 更多