【问题标题】:Running multiple threads in Java在 Java 中运行多个线程
【发布时间】:2010-11-20 23:04:32
【问题描述】:

我遇到了一个非常奇怪的问题。我正在处理一项任务,该任务涉及构建在二维“棋盘”上移动的人物的模拟。每个图形都由一个实现 Runnable 接口的对象表示。 问题是当我尝试在不同的线程中运行每个对象时:

    ArrayList< Thread > playerThreads = new ArrayList< Thread >();
    ArrayList< Player > players = p.getSpawnedPlayers(); // This method returns all Runnable objects
    for ( Player pl : players )
        playerThreads.add( new Thread( pl ) );

    for ( Thread pt : playerThreads )
    {
        pt.run();
    }

由于某种原因,只有第一个线程启动。我很确定,run() 方法 播放器类如下所示:

public void run()
{
    System.out.println( "Player " + this.hashCode() + " starts moving..." );
    ...
}

我只从单个对象获取输出。我仔细检查并确保两个 ArrayList 都包含正确数量的对象。 知道为什么会这样吗?

【问题讨论】:

    标签: java multithreading runnable


    【解决方案1】:

    要启动线程,您必须调用pt.start(),而不是pt.run()。有关所有详细信息,请参阅 JavaDoc。

    【讨论】:

    • facepalm 我完全忘记了这是正确的做法。傻我:)
    • 在我发表评论时我不能,在我发布我假设的问题后不久:)
    • 愿意稍微编辑一下这个答案,以便为后代充实它吗?当用户调用 run() 而不是 start 时会发生什么?谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-01
    • 2020-01-10
    相关资源
    最近更新 更多