1.线程交替输出
LockSupport.unpark
LockSupport.park
char[] aI = "1234567".toCharArray(); char[] aC = "ABCDEFG".toCharArray();
LockSupport
t1 = new Thread(() -> { for (char c : aI) { System.out.print(c); LockSupport.unpark(t2); LockSupport.park(); } }, "t1"); t2 = new Thread(() -> { for (char c :aC) { LockSupport.park(); System.out.print(c); LockSupport.unpark(t1); } }, "t2"); t1.start(); t2.start();
Sync wait notify
new Thread(() -> { synchronized (o) { for (char c : aI) { System.out.print(c); try { o.notify(); o.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } } o.notify(); }, "t1").start(); new Thread(() -> { synchronized (o) { for (char c : aC) { System.out.print(c); try { o.notify(); o.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } } o.notify(); }, "t2").start();
Lock ReentrantLock await signal
new Thread(() -> { lock.lock(); try { for (char c : aI) { System.out.print(c); condition.signal(); condition.await(); } condition.signal(); } catch (Exception e) { e.printStackTrace(); } finally { lock.unlock(); } }, "t1").start(); new Thread(() -> { lock.lock(); try { for (char c : aC) { System.out.print(c); condition.signal(); condition.await(); } condition.signal(); } catch (Exception e) { e.printStackTrace(); } finally { lock.unlock(); } }, "t2").start();