用Java如何让两个线程调用同一个方法,遍历出字符串中不同的字符
时间: 2024-04-07 11:33:43 浏览: 85
Java提取两个字符串中的相同元素方法
在Java中,可以通过使用两个线程来同时调用同一个方法,并遍历出字符串中的不同字符。下面是一个示例代码,演示了如何实现这个功能:
```java
import java.util.HashSet;
import java.util.Set;
public class Main {
public static void main(String[] args) {
String str = "Hello, World!";
Set<Character> uniqueChars = new HashSet<>();
Thread t1 = new Thread(() -> {
for (char c : str.toCharArray()) {
synchronized (uniqueChars) {
if (!uniqueChars.contains(c)) {
uniqueChars.add(c);
System.out.println("Thread 1: Found unique character: " + c);
}
}
}
});
Thread t2 = new Thread(() -> {
for (char c : str.toCharArray()) {
synchronized (uniqueChars) {
if (!uniqueChars.contains(c)) {
uniqueChars.add(c);
System.out.println("Thread 2: Found unique character: " + c);
}
}
}
});
t1.start();
t2.start();
}
}
```
在这个例子中,我们创建了两个线程(t1和t2),它们同时遍历给定的字符串(str)。每个线程都使用一个`Set`(uniqueChars)来存储已经遇到的字符。
在遍历过程中,我们使用`synchronized`关键字来确保两个线程不会同时修改`uniqueChars`集合。这样可以防止竞态条件(race condition)和数据不一致的问题。
每当一个线程发现一个不同的字符时,它会将它添加到`uniqueChars`集合中,并打印出相应的消息。
请注意,由于线程的执行顺序是不确定的,因此输出的顺序可能会有所不同。但是,最终的结果应该是包含了字符串中所有不同字符的集合。
阅读全文