范例:
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();
}
}
错位问题解决了,但是重复数据更加严重了