3 回答
TA贡献1802条经验 获得超6个赞
没有打印任何内容,因为您没有启动线程。
public void createThreads(int n){
for (int i = 0; i < n; i++) {
new Thread(() -> {
for (int j = 1; j <= 100; j++) {
System.out.println(j);
}
}).start(); // <-- .start() makes the thread start running
}
}
另请注意,我已将您的 for 循环更改为for (int j = 1; j <= 100; j++),因为目的是从1to打印数字100(而不是从0to 99)。
TA贡献1770条经验 获得超3个赞
创建线程是不够的,您还需要启动它们。
new Thread(() -> { ... }).start();
我建议在这里进行一些重构。
从具有名称的方法中,createThreads我希望返回创建的线程 - Thread[] createThreads(int n)(1)。
该代码是不容易读取-移动Thread的Runnable到一个单独的方法将使其更清晰(2)。
createThreads如果您在方法中同时创建和启动线程 (3) ,名称就会变得不准确。将其重命名为createAndStartThreads或创建两个单独的方法createThreads,startThreads这是更可取的,因为方法应该承担单一责任。
public Thread[] createThreads(int n) {
final Thread[] threads = new Thread[n];
for (int i = 0; i < n; ++i) {
threads[i] = new Thread(this::doTask);
}
return threads;
}
private void doTask() {
for (int j = 1; j <= 100; j++) {
System.out.println(j);
}
}
public void startThreads(Thread[] threads) {
for (Thread thread : threads) {
thread.start();
}
}
TA贡献1859条经验 获得超6个赞
这就是我为创建 N 个线程所做的工作。如果您想指定线程的名称,这里提到了完全不同的方法。
1. Thread T[] = new Thread[list.size()];
2. for (int i = 0; i < list.size(); i++) {
3. T[i] = new Thread(new constructor_name());
4. T[i].setName(list.get(i));
5. T[i].start();
6. }
解释:
使用您的列表大小创建线程数组。
执行循环直到列表的最后一个元素。
在循环内启动、分配和启动线程。
线程的执行:
public void run() {
try {
method_name(Thread.currentThread().getName());
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
注意:这里 method_name(thread_parameter) 是为列表的每个元素同步调用的。
添加回答
举报