猿问

创建 n 个线程

我有一个java方法,我想在其中创建n个线程,然后让每个线程打印出从1到100的数字。


public void createThreads(int n){

    for (int i = 0; i < n; i++) {

        new Thread(() -> {

            for (int j = 0; j < 100; j++) {

                System.out.println(j);



            }

        });       

    }

}

每当我运行此方法时,即使我传递参数,也不会打印任何内容。我怎样才能解决这个问题?


30秒到达战场
浏览 183回答 3
3回答

呼啦一阵风

没有打印任何内容,因为您没有启动线程。public void createThreads(int n){&nbsp; &nbsp; for (int i = 0; i < n; i++) {&nbsp; &nbsp; &nbsp; &nbsp; new Thread(() -> {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for (int j = 1; j <= 100; j++) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; System.out.println(j);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }).start(); // <-- .start() makes the thread start running&nbsp; &nbsp;&nbsp; &nbsp; }}另请注意,我已将您的 for 循环更改为for (int j = 1; j <= 100; j++),因为目的是从1to打印数字100(而不是从0to 99)。

德玛西亚99

创建线程是不够的,您还需要启动它们。new Thread(() -> { ... }).start();我建议在这里进行一些重构。从具有名称的方法中,createThreads我希望返回创建的线程 - Thread[] createThreads(int n)(1)。该代码是不容易读取-移动Thread的Runnable到一个单独的方法将使其更清晰(2)。createThreads如果您在方法中同时创建和启动线程 (3) ,名称就会变得不准确。将其重命名为createAndStartThreads或创建两个单独的方法createThreads,startThreads这是更可取的,因为方法应该承担单一责任。public Thread[] createThreads(int n) {&nbsp; &nbsp; final Thread[] threads = new Thread[n];&nbsp; &nbsp; for (int i = 0; i < n; ++i) {&nbsp; &nbsp; &nbsp; &nbsp; threads[i] = new Thread(this::doTask);&nbsp; &nbsp; }&nbsp; &nbsp; return threads;}private void doTask() {&nbsp; &nbsp; for (int j = 1; j <= 100; j++) {&nbsp; &nbsp; &nbsp; &nbsp; System.out.println(j);&nbsp; &nbsp; }}public void startThreads(Thread[] threads) {&nbsp; &nbsp; for (Thread thread : threads) {&nbsp; &nbsp; &nbsp; &nbsp; thread.start();&nbsp; &nbsp; }}

慕丝7291255

这就是我为创建 N 个线程所做的工作。如果您想指定线程的名称,这里提到了完全不同的方法。1. Thread T[] = new Thread[list.size()];2. for (int i = 0; i < list.size(); i++) {3.&nbsp; &nbsp; &nbsp;T[i] = new Thread(new constructor_name());4.&nbsp; &nbsp; &nbsp;T[i].setName(list.get(i));5.&nbsp; &nbsp; &nbsp;T[i].start();6. }解释:使用您的列表大小创建线程数组。执行循环直到列表的最后一个元素。在循环内启动、分配和启动线程。线程的执行:public void run() {&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; try {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;method_name(Thread.currentThread().getName());&nbsp; &nbsp; } catch (Exception ex) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;System.out.println(ex.getMessage());&nbsp; &nbsp; }&nbsp;}注意:这里 method_name(thread_parameter) 是为列表的每个元素同步调用的。
随时随地看视频慕课网APP

相关分类

Java
我要回答