举例,输出N行的字符串"ABC",就要用3个线程,每个线程分别负责输出一个字符,输出结果应该为N行的"ABC"
我的思路是:
public class TestThead {
public static void main(String[] args) throws InterruptedException {
String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; // 随便改什么字符串
int runCount = 500; // 任意次数
int strLength = str.length();
String[] strBuffer = new String[strLength * runCount]; // 字符串输出缓存
Thread[] Ths = new Thread[strLength];
for (int index = 0; index < strLength; index++) {
Ths[index] = new Thread(new Runner(index, strBuffer, str, strLength, runCount));
Ths[index].start();
}
//等待所有线程结束
for (int index = 0; index < strLength; index++) {
Ths[index].join();
}
//输出结果
for (int i = 0; i < strBuffer.length; i++) {
System.out.print(strBuffer[i]);
if ((i + 1) % strLength == 0)
System.out.println();
}
}
}
class Runner implements Runnable {
String[] strBuffer;
String str;
int strLength;
int index;
int runCount;
public Runner(int index, String[] strBuffer, String str, int strLength, int runCount) {
this.index = index;
this.runCount = runCount;
this.strBuffer = strBuffer;
this.str = str;
this.strLength = strLength;
}
@Override
public void run() {
for (int i = 0; i < runCount; i++) {
strBuffer[strLength * i + index] = String.valueOf(str.charAt(index));
}
}
}
这个是属于空间换时间的,不需要同步,速度应该会比加锁的要快吧?
另外一种方法:
public class Tester {
public static void main(String[] arg) {
String str = "abc";
Integer[] locker = new Integer[1];
locker[0] = 0;
for (int i = 0; i < str.length(); i++) {
new Thread(new printStr(locker, str, 10)).start();
}
}
}
class printStr implements Runnable {
Integer[] locker = null;
String str = null;
int COUNT;
public printStr(Integer[] locker, String str, int cOUNT) {
super();
this.locker = locker;
this.str = str;
COUNT = cOUNT;
}
@Override
public void run() {
synchronized (locker) {
while (locker[0] < str.length() * COUNT) {
System.out.print(str.charAt(locker[0]++ % str.length()));
if (locker[0] % str.length() == 0)
System.out.println();
try {
locker.notifyAll();
locker.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
locker.notifyAll();
}
}
}
分享到:
相关推荐
字符串字面量会被放入常量池,如果两个字符串字面量相同,它们会指向同一个对象。 7. **字符串比较**: 使用`compareTo(String anotherString)`或`compareToIgnoreCase(String anotherString)`进行字符串的自然...
- 字符串长度:`length()`方法。 - 子串提取:`substring()`方法。 - 查找子串:`indexOf()`,`lastIndexOf()`方法。 - 分割字符串:`split()`方法。 3. **字符操作** - 获取单个字符:`charAt(int index)`。 ...
2. `compareTo()`:根据字典顺序比较字符串,返回值表示字符串的相对位置,0表示相等,负值表示第一个字符串小于第二个,正值反之。 3. `compareToIgnoreCase()`:与`compareTo()`类似,但不考虑字符大小写。 四、...
- `String trim()`:返回一个新字符串,该字符串是通过删除当前字符串开头和结尾的所有空白字符而获得的。 - **示例**: ```java String s = " Hello World "; String trimmed = s.trim(); // 返回 "Hello World...
当创建一个字符串时,如果这个字符串已经存在于内存中(即相同内容的字符串之前已被创建过),Python就会重用该字符串的内存地址,而不是创建新的对象。这种机制被称为字符串驻留,可以减少内存消耗。例如,长度为0...
6. `replace()`:用另一个字符串替换字符串的一部分。 7. `compareTo()`:比较字符串的顺序,返回整数值。 8. `intern()`:返回字符串在常量池中的唯一实例。 9. `substring()`:提取字符串的一部分。 在提供的代码...
`regionMatches()` 方法用于比较一个字符串与另一个字符串的一个区域是否相等。 ```java String s1 = "Hello"; String s2 = "HeLlo"; System.out.println(s1.regionMatches(0, s2, 0, 3)); // 输出true ``` #### 14...
- `compareTo(String s)`:根据字典顺序比较字符串,返回值为0表示两者相等,正数表示当前字符串大于`s`,负数表示小于`s`。 4. **字符串与基本数据类型的相互转化**:Java提供了`Integer.toString(int)`、`Double...
3. **字符串长度和字符访问** - `length()`: 返回字符串的长度,即字符个数。 - `charAt(int index)`: 返回指定索引位置的字符。 4. **字符串连接** - `+` 运算符:可以用于连接两个字符串。 - `StringBuilder`...
3. **字符串长度**:使用`length()`方法可以获取字符串的长度,它返回的是字符个数,而非字节数。 4. **比较字符串**:`equals()`方法用于比较两个字符串的内容是否相等,忽略大小写可以使用`equalsIgnoreCase()`。...
例如,可以使用“滑动窗口”算法,每次比较两个字符串的一个固定长度的子串。 2. **分布式计算**:使用分布式系统,如Hadoop或Spark,将比较任务分散到多台机器上并行执行,可以显著提高效率。每个节点负责一部分...
Java提供了丰富的字符串方法,如`length()`用于获取字符串长度,`charAt(int index)`用于获取指定位置的字符,`substring(int beginIndex, int endIndex)`用于截取子字符串。`indexOf(String str)`和`lastIndexOf...
4. 方法调用:如`length()`返回字符串长度,`charAt(int index)`获取指定索引位置的字符,`indexOf(String str)`查找子字符串首次出现的位置等。 四、字符串比较 1. `equals()`方法:比较两个字符串的内容是否相等...
Java中的字符串处理是编程中非常基础且重要的部分,因为它们在数据表示、用户输入处理、输出格式化等场景中扮演着关键角色。在Java中,字符串被定义为不可变对象,这意味着一旦创建,就不能更改其内容。这使得String...
7. `regionMatches(int startIndex, String str2, int str2StartIndex, int numChars)`:此方法检查字符串中的一段是否与另一个字符串的相应部分匹配,可以指定是否忽略大小写。 8. `startsWith(String prefix)`和`...
- `compareTo()`:比较字符串的字典顺序,返回整数值表示两个字符串的相对大小。 #### 2.2 字符串的其他方法 - `startsWith(prefix)`:检查字符串是否以指定前缀开头。 - `endsWith(suffix)`:检查字符串是否以指定...
`String`类提供了多种方法来处理字符串,例如比较字符串的`equals()`和`compareTo()`方法,前者比较字符串内容是否相等,后者则按照字典顺序比较字符串。`startsWith()`和`endsWith()`方法用于检查字符串是否以特定...
- **length()**和**capacity()**:分别获取当前字符串长度和已分配的容量。 - **ensureCapacity()**:确保缓冲区至少具有指定的容量,如果不足则扩展容量。 以上是Java字符串常用方法的详细解释,理解和掌握这些...
**作用**:将一个字符串连接到另一个字符串的末尾。 - **语法**:`String concat(String str)` - **示例**: ```java String str1 = "Hello"; String str2 = "World"; String result = str1.concat(str2); // ...