范例:
class Info { private String title; private String content; public synchronized void set(String title, String content) { this.title = title; try { Thread.sleep(200); } catch (Exception e) { e.printStackTrace(); } this.content = content; } public synchronized void get() { try { Thread.sleep(20); } catch (Exception e) { e.printStackTrace(); } System.out.println(this.title + "->" + this.content); } } class Productor implements Runnable {// 生产者类 private Info info; public Productor(Info info) { this.info = info; } @Override public void run() { for (int i = 0; i < 10; i++) { if (i % 2 == 0) { this.info.set("蜡笔小新", "好学生"); } else { this.info.set("小白", "好狗狗"); } } } } class Customer implements Runnable { private Info info; public Customer(Info info) { this.info = info; } @Override public void run() { for (int i = 0; i < 20; i++) { this.info.get(); } } } public class Demo { public static void main(String[] args) { Info info = new Info(); new Thread(new Productor(info)).start(); new Thread(new Customer(info)).start(); } }
错位问题解决了,但是重复数据更加严重了