Java交替打印两个字符串

一、使用volatile关键字

public class Main { volatile int x = 0; Main() { new Thread(() -> { while (x < 100) { while (x % 2 == 0) ; System.out.print("A"); x++; } }).start(); new Thread(() -> { while (x < 100) { while (x % 2 == 1) ; System.out.print("B"); x++; } }).start(); }public static void main(String[] args) { new Main(); } }

二、使用atomicInteger
import java.util.concurrent.atomic.AtomicInteger; public class Main {Main() { final AtomicInteger x = new AtomicInteger(0); new Thread(() -> { while (x.get() < 100) { while (x.get() % 2 == 0) ; System.out.print("A"); x.incrementAndGet(); } }).start(); new Thread(() -> { while (x.get() < 100) { while (x.get() % 2 == 1) ; System.out.print("B"); x.incrementAndGet(); } }).start(); }public static void main(String[] args) { new Main(); } }

三、使用锁
import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class Main { Lock x = new ReentrantLock(); int index = 0; Main() { new Thread(() -> { boolean over = false; while (!over) { if (index % 2 == 0) { x.lock(); if (index % 2 == 0) { System.out.print("A"); index++; } over = index > 100; x.unlock(); } } }).start(); new Thread(() -> { boolean over = false; while (!over) { if (index % 2 == 1) { x.lock(); if (index % 2 == 1) { System.out.print("B"); index++; } over = index > 100; x.unlock(); } } }).start(); }public static void main(String[] args) { new Main(); } }

四、使用synchronized关键字
import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class Main { int index = 0; Main() { new Thread(() -> { boolean over = false; while (!over) { if (index % 2 == 0) { synchronized (this) { if (index % 2 == 0) { System.out.print("A"); index++; } over = index > 100; } } } }).start(); new Thread(() -> { boolean over = false; while (!over) { if (index % 2 == 1) { synchronized (this) { if (index % 2 == 1) { System.out.print("B"); index++; } over = index > 100; } } } }).start(); }public static void main(String[] args) { new Main(); } }

五、使用Python 【Java交替打印两个字符串】JavaScript是单线程的,Python可以实现多线程,但是Python的多线程不能充分利用多核。
这就相当于Python天生就不需要volatile。
a = "床前明月光疑是地上霜" from threading import Threadindex = 0def one(): global index while index < len(a): while index % 2 == 0: pass if index >= len(a): break print(a[index]) index += 1def two(): global index while index < len(a): while index % 2 == 1: pass if index >= len(a): break print(a[index]) index += 1Thread(target=one).start() Thread(target=two).start()

    推荐阅读