当前位置: 首页 > 知识库问答 >
问题:

线程循环-扩展线程类Java

松景铄
2023-03-14

我需要编写一个扩展Thread类的应用程序。我的类在实例化时接受一个整数(即100)<代码>(MyThread myt=新的MyThread(100);) 这个整数将是这个类循环并打印消息的次数。消息应该是“线程正在运行…100”。100将是我传入构造函数的任何数字。如果数字是150,那么输出应该是“线程正在运行…100”。我应该使用main方法来测试这个类。在主线程中,我将启动两个线程,一个线程150,一个线程200。我不需要为这段代码使用sleep()方法。

我已经写了一段代码,但我很困惑。我的信息应该打印100次吗?我不确定我的代码是否满足所有要求。我还应该实现这段代码,将这个类更改为使用Runnable接口,而不是Thread类

public class MyThread extends Thread {

    private int numtimes;

    public MyThread(int numtimes) {
        this.numbtimes = numbtimes;

    }

    public void run() {

        for (int i = 0; i < numbtimes; i++) {
            System.out.println("Thread Running..." + numbtimes);

        }
    }

    public static void main(String[] args) {

        MyThread mytr1 = new MyThread(150);
        mytr1.start();

        MyThread mytr2 = new MyThread(200);
        mytr2.start();
    }

}

这就是被问到的吗?如何使用Runnable接口?

共有1个答案

通寂离
2023-03-14

你可以用两种方式。实际上是同一种。但我更喜欢lambda

public class StackOverFlowDemo {

/**
 * one
 * */
public static class MyRun implements Runnable {
    private int numtimes;

    public MyRun(int numtimes) {
        this.numtimes = numtimes;
    }

    @Override
    public void run() {
        for (int i = 0; i < numtimes; i++) {
            System.out.println(String.format("Thread(%s) Running... numtimes(%d), current count (%d) ",
                    Thread.currentThread().getName(),
                    numtimes, i));
        }
    }
}

/**
 * another way
 * */
public static void print(int numtimes) {
    for (int i = 0; i < numtimes; i++) {
        System.out.println(String.format("Thread(%s) Running... numtimes(%d), current count (%d) ",
                Thread.currentThread().getName(),
                numtimes, i));
    }
}

public static void main(String[] args) {
    /**
     * one
     * */
    Thread t1 = new Thread(new MyRun(150), "thread 1");
    Thread t2 = new Thread(new MyRun(200), "thread 2");
    t1.start();
    t2.start();

    /**
     * another way
     * */
    new Thread(() -> StackOverFlowDemo.print(150), "t1").start();
    new Thread(() -> StackOverFlowDemo.print(200), "t2").start();
}

}

 类似资料:
  • 我已经查看了这里给出的一些ANWER,但我没有得到解决我问题的确切方法:我不想创建一个新的类并扩展runnable或Thread。 我有一个服务,它在创建时必须每10秒检查一些东西,并且所需的调用不能从主线程执行,所以在StartCommand()方法中我执行以下操作: 现在,当我调用onStopService()时,我想停止这个线程。方法stop()不推荐使用,因此我使用中断(): 正如我预期的

  • 扩展说明 服务提供方线程池实现策略,当服务器收到一个请求时,需要在线程池中创建一个线程去执行服务提供方业务逻辑。 扩展接口 org.apache.dubbo.common.threadpool.ThreadPool 扩展配置 <dubbo:protocol threadpool="xxx" /> <!-- 缺省值设置,当<dubbo:protocol>没有配置threadpool时,使用此配置 -

  • 我很难理解内部类线程的行为。 它总是打印出“main”,并且线程是按顺序执行的。为什么内部类线程的执行由主线程执行? 谢谢!

  • 我已经写了这个生产者/消费者问题解决方案。它似乎在工作,而不是无限循环。我的印象是,pthread\u exit(NULL) 会让它停止,但老实说,我已经迷路了。有人能告诉我如何阻止循环的正确方向吗?

  • 问题内容: 这可能是我误读了我所读内容的一种情况,但是在Java中杀死线程的所有示例似乎都表明您必须发出信号以杀死自己。您不能在没有严重风险的情况下从外面杀死它。问题是,所有有关如何“礼貌地”要求线程死亡的示例都有某种循环,因此您要做的就是观察每次迭代中的标志。 因此,我得到的是一个线程,该线程执行的操作仅需要一段时间(一系列SQL查询)。我当然可以在每个步骤之后进行检查,但是它们并没有处于循环中

  • 我正在尝试编写一个线程,该线程将在我的主程序的后台运行,并监视某些内容。在某个时候,主程序应该向线程发出安全退出的信号。下面是一个以固定间隔将本地时间写入命令行的最小示例。 当“on”变量没有通过引用传递时,此代码会编译并产生预期的结果,只是线程永远不会终止。一旦变量通过引用传递,我就会收到编译器错误 您能建议一种修复此代码的方法吗? 额外的问题:哪里出了问题,为什么它可以与std::ref一起工