两个线程交替打印字符串

1,351 阅读1分钟

需求:

有两个字符串:

String a = ""1234567"; String b = "ABCDEFG"

使用两个线程 t1t2 ,分别打印 字符串a,b; 使其能交替输出:1A2B3C4D5E6F7G

解法:

  • 这里采用juc下的工具类:LockSupport ,展现线程直线的通信,即直接,又暴力!
  • 数据源:
    private Thread t1;
    private Thread t2;
    private char[] aI = "1234567".toCharArray();
    private char[] aC = "ABCDEFG".toCharArray();
  • 思路和具体实现
 public void test3() {
        t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                for (char c : aI) {
                    // 上来就打印一个字符
                    System.out.print(c);
                    // 立马解锁t2
                    LockSupport.unpark(t2);
                    // 自己锁住自己
                    LockSupport.park();
                }
            }
        });

        t2 = new Thread(new Runnable() {
            @Override
            public void run() {
                for (char c : aC) {
                    // 上来就锁住自己,防止自己先打印
                    LockSupport.park();
                    // 被t1解锁了,开始打印一个字符
                    System.out.print(c);
                    // 解锁t1 线程,让t1 能继续打印
                    LockSupport.unpark(t1);
                }
            }
        });
        t1.start();
        t2.start();
    }