start()不调用run()方法

eoxn13cs  于 2021-08-25  发布在  Java
关注(0)|答案(2)|浏览(427)

我正在尝试运行以下java程序。但它没有显示任何输出。

class Player implements Runnable{
        Thread t = new Thread();

        public Player(String name) {
            t.setName(name);
            t.start();
    }

    @Override
    public void run() {
        System.out.println(t.getName() + "starts the race.");
        for(int i = 0; i<3; i++)
        {
            System.out.println(t.getName() + " crossed " + i + " obstacle.");
        }
        System.out.println(t.getName() + " finishes the race.");
    }
}

class Competition {
    public static void main(String[] args){
        Player player1 = new Player("Cercei");
        Player player2 = new Player("Jamie");
        Player player3 = new Player("Tyrion");
    }
}

我受到两项限制。
1.请勿编辑竞赛类。
2.玩家类中不允许添加任何变量。只添加必要的方法。
输出可能如下所示:
杰米开始比赛。赛尔西开始比赛。提利昂开始比赛。cercei跨越了0个障碍。杰米越过了0号障碍。提利昂越过了0号障碍。杰米越过了一个障碍。杰米越过了两个障碍。cercei越过了1个障碍。cercei越过了2个障碍。赛尔西完成了比赛。提利昂越过了一个障碍。提利昂越过了2号障碍物。提利昂完成了比赛。杰米跑完了全程。
我已经写了整个代码,就像我在互联网上读到的线程操作一样,但是没有任何输出。此外,我还检查了调试器。之后 t.strat() 方法,它永远不会进入 run() method . 你能帮忙吗?
原始问题:
在下面的代码中编辑player类,以便代码给出预期的输出。不要只打印预期的输出。不要编辑竞赛类。不允许在player类中添加任何变量。只添加必要的方法。您的代码会给出与预期输出完全相同的输出吗?解释原因。

class Player implements Runnable{
Thread t;
}
class Competition{
public static void main(String[] args){
Player player1 = new Player("Cercei");
Player player2 = new Player("Jamie");
Player player3 = new Player("Tyrion");
}
}
7cjasjjr

7cjasjjr1#

你需要告诉警察 Thread t 在你们班里 Player 目标是什么 Runnable 它应该运行。
根据你的设计,目标 RunnablePlayer 阶级本身( this ):

class Player implements Runnable {
    Thread t;

    public Player(String name) {
        t = new Thread(this); //<-- the target Runnable of the Thread t is the instance of Player itself
        t.setName(name);
        t.start();
    }

    @Override
    public void run() {
        System.out.println(t.getName() + "starts the race.");
        for (int i = 0; i < 3; i++) {
            System.out.println(t.getName() + " crossed " + i + " obstacle.");
        }
        System.out.println(t.getName() + " finishes the race.");
    }
}

在当前代码中,初始化 Thread t 作为 new Thread() 但你没有提供任何 Runnable 要瞄准目标,那么 .start() 线程的方法什么也不做。
p、 我非常同意andy turner的评论(尽管我猜你这样做只是为了练习):在构造函数中启动线程确实不是好的做法。

yebdmbv4

yebdmbv42#

您只是在中缺少一个参数“this” Thread 建造师

class Player implements Runnable
{
    Thread t = new Thread(this); // <-- here
  .
  .
  .
}

相关问题