Java 多线程大写字符串

标签 java multithreading

我有一个字符串:“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/

相关文章:

java - 为泛型的实现类的子类变量提供扩展功能

.net - 数据表和线程安全

java - 池化问题 : Item borrowed more than once

android - 如何在不阻塞的情况下等待 Android UI 线程中异步填充的对象?

java - 正则表达式:完全匹配由定界符分割的字符串

java - 比较一个类的两个列表而不迭代列表

java - 使用散列法查找总长度最小的字符串子数组,该子数组包含原始数组中的所有不同字符串

java - 循环列表中的递归调用

java - 暂停所有正在运行的线程一段时间

java - 线程池执行器监控需求