当前位置:实例文章 » JAVA Web实例» [文章]【多线程例题】顺序打印abc线程

【多线程例题】顺序打印abc线程

发布人:shili8 发布时间:2024-12-28 08:20 阅读次数:0

**多线程例题**

在计算机编程中,多线程是指一个程序可以同时执行多个线程的功能。每个线程都有自己的执行栈和局部变量。在 Java 中,我们可以使用 `Thread` 类来创建多线程。

下面是一个例子:我们有三个线程分别打印 "a"、"b" 和 "c",但是由于线程切换的原因,这些线程可能会交叉执行,从而导致输出顺序不确定。

**示例代码**

javapublic class ThreadExample {
 public static void main(String[] args) {
 // 创建三个线程 Thread threadA = new Thread(() -> printChar('a'));
 Thread threadB = new Thread(() -> printChar('b'));
 Thread threadC = new Thread(() -> printChar('c'));

 // 启动线程 threadA.start();
 threadB.start();
 threadC.start();

 // 等待所有线程结束 try {
 threadA.join();
 threadB.join();
 threadC.join();
 } catch (InterruptedException e) {
 Thread.currentThread().interrupt();
 }
 }

 private static void printChar(char c) {
 for (int i =0; i < 1000; i++) { // 打印1000次 System.out.print(c);
 }
 }
}

**输出结果**
由于线程切换的原因,输出结果可能会交叉执行,从而导致 "a"、"b" 和 "c" 的打印顺序不确定。

例如:
abcaabbcc...
abcbaacccc...

**解决方案**

为了保证线程之间的顺序执行,我们可以使用 `synchronized` 关键字来锁定共享资源。下面是一个例子:

javapublic class ThreadExample {
 private static final Object lock = new Object();

 public static void main(String[] args) {
 // 创建三个线程 Thread threadA = new Thread(() -> printChar('a'));
 Thread threadB = new Thread(() -> printChar('b'));
 Thread threadC = new Thread(() -> printChar('c'));

 // 启动线程 threadA.start();
 threadB.start();
 threadC.start();

 // 等待所有线程结束 try {
 threadA.join();
 threadB.join();
 threadC.join();
 } catch (InterruptedException e) {
 Thread.currentThread().interrupt();
 }
 }

 private static void printChar(char c) {
 synchronized (lock) { // 锁定共享资源 for (int i =0; i < 1000; i++) { // 打印1000次 System.out.print(c);
 }
 }
 }
}

**输出结果**
由于线程之间的顺序执行被锁定,输出结果将是 "abc" 的顺序打印。

例如:
aaaaaaabbbbbbcccccc...

**总结**

在本例中,我们使用 `Thread` 类创建了三个线程分别打印 "a"、"b" 和 "c"。由于线程切换的原因,这些线程可能会交叉执行,从而导致输出顺序不确定。但是通过使用 `synchronized` 关键字锁定共享资源,我们可以保证线程之间的顺序执行,从而得到预期的输出结果。

**参考**

* Java API 文档:[Thread]( />* Java API 文档:[synchronized](

其他信息

其他资源

Top