【多线程例题】顺序打印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](