输出结果 cccc
package com.mine.testhttp; import javax.sound.midi.Soundbank; import java.sql.SQLOutput; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.concurrent.locks.LockSupport; import java.util.stream.Collectors; /** * @author levey * @date 2020/10/19 */ public class M { public void produce() throws InterruptedException { synchronized (this) { while (true) { System.out.println("id:"+Thread.currentThread().getId()); this.notifyAll(); Thread.sleep(1000); this.wait(); } } } public void comsumer() throws InterruptedException { synchronized (this) { this.wait(); System.out.println("cccc"); } } public static void main(String[] args) throws Exception { M m = new M(); // produ p = new produ(m); // produ p2 = new produ(m); // produ p3 = new produ(m); // // p.start(); // p2.start(); // p3.start(); comsu c1=new comsu(m); comsu c2=new comsu(m); comsu c3=new comsu(m); c1.start();c2.start();c3.start(); Thread.sleep(1000); synchronized (m) { m.notifyAll(); } } } class produ extends Thread { M m; public produ(M m) { this.m = m; } @Override public void run() { try { m.produce(); } catch (InterruptedException e) { e.printStackTrace(); } } } class comsu extends Thread { M m; public comsu(M m) { this.m = m; } @Override public void run() { try { m.comsumer(); } catch (InterruptedException e) { e.printStackTrace(); } } }输出结果
cccc cccc cccc
package com.mine.testhttp; import javax.sound.midi.Soundbank; import java.sql.SQLOutput; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.concurrent.locks.LockSupport; import java.util.stream.Collectors; /** * @author levey * @date 2020/10/19 */ public class M { public void produce() throws InterruptedException { synchronized (this) { while (true) { System.out.println("id:"+Thread.currentThread().getId()); this.notifyAll(); Thread.sleep(1000); this.wait(); } } } public void comsumer() throws InterruptedException { synchronized (this) { this.wait(); System.out.println("cccc"); } } public static void main(String[] args) throws Exception { M m = new M(); produ p = new produ(m); produ p2 = new produ(m); produ p3 = new produ(m); p.start(); p2.start(); p3.start(); // Thread.sleep(1000); // synchronized (m) { // m.notifyAll(); // // } } } class produ extends Thread { M m; public produ(M m) { this.m = m; } @Override public void run() { try { m.produce(); } catch (InterruptedException e) { e.printStackTrace(); } } } class comsu extends Thread { M m; public comsu(M m) { this.m = m; } @Override public void run() { try { m.comsumer(); } catch (InterruptedException e) { e.printStackTrace(); } } }
输出结果:
id:11 id:12 id:13 id:12 id:11 id:12 id:13 id:12 id:11
......
package com.mine.testhttp; import javax.sound.midi.Soundbank; import java.sql.SQLOutput; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.concurrent.locks.LockSupport; import java.util.stream.Collectors; /** * @author levey * @date 2020/10/19 */ public class M { public void produce() throws InterruptedException { synchronized (this) { while (true) { System.out.println("id:"+Thread.currentThread().getId()); this.notifyAll(); Thread.sleep(1000); this.wait(); } } } public void comsumer() throws InterruptedException { synchronized (this) { this.wait(); System.out.println("cccc"); } } public static void main(String[] args) throws Exception { M m = new M(); produ p = new produ(m); produ p2 = new produ(m); p.start(); p2.start(); // Thread.sleep(1000); // synchronized (m) { // m.notifyAll(); // // } } } class produ extends Thread { M m; public produ(M m) { this.m = m; } @Override public void run() { try { m.produce(); } catch (InterruptedException e) { e.printStackTrace(); } } } class comsu extends Thread { M m; public comsu(M m) { this.m = m; } @Override public void run() { try { m.comsumer(); } catch (InterruptedException e) { e.printStackTrace(); } } }以上代码可以起到交替输出