我有一个字符串:“abcdef”和 3 个线程:t1、t2 和 t3。我希望他们返回大写的字符串:“ABCDEF”(字符顺序无关紧要)。我成功地将字符串大写了 3 次。我希望这一切只发生一次。这是主类:
public static void main(String[] args) {
Thread t1 = new Thread(new CapitalizeString("Thread 1", "abcdef"));
Thread t2 = new Thread(new CapitalizeString("Thread 2", "abcdef"));
Thread t3 = new Thread(new CapitalizeString("Thread 3", "abcdef"));
t1.start();
t2.start();
t3.start();
}
这是用于大写的类:
import java.util.Random;
public class CapitalizeString implements Runnable {
String list;
String nameThread;
public CapitalizeString(String name, String str) {
nameThread = name;
list = str;
}
public void capitalize() {
char[] arr = list.toCharArray();
for (int i = 0; i < list.length(); i++) {
arr[i] = Character.toUpperCase(arr[i]);
System.out.println("Thread-ul " + nameThread + " solved " + arr[i]);
}
System.out.print("\n");
}
@Override
public void run() {
try {
capitalize();
} catch (Exception e) {
}
}
}
最佳答案
这不仅会变得更加复杂,而且会慢很多倍。但是,作为练习,我建议使用最简单的方法,即使用并行流
String upper = "abcdef".chars().parallel()
.map(Character::toUpperCase)
.mapToObj(c -> Character.toString((char) c))
.collect(Collectors.joining());
System.out.println(upper);
您可能想知道,为什么这么慢?从人性化的角度考虑这个问题,你可以
a) 在纸上手工转换字母,或者
b) 您可以向三个 friend 发送三封信,要求他们每人给您寄两封大写字母。
除了更糟糕的是,因为必须首先启动线程,这需要更长的时间,所以确实是这样
c) 找到三个愿意回复您信件的新 friend ,然后 b)
关于Java 多线程大写字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53089643/