public final void wait() throws InterruptedException 线程等待
public final void notify() 线程唤醒
1 public class Student { 2 private String name; 3 private int age; 4 5 public Student(String name, int age) { 6 super(); 7 this.name = name; 8 this.age = age; 9 } 10 11 public Student() { 12 13 } 14 15 public int getAge() { 16 return age; 17 } 18 19 public void setAge(int age) { 20 this.age = age; 21 } 22 23 public String getName() { 24 return name; 25 } 26 27 public void setName(String name) { 28 this.name = name; 29 } 30 31 @Override 32 public String toString() { 33 return "Student [name=" + name + ", age=" + age + "]"; 34 } 35 36 } 37 38 /** 39 * 生产学生的类 40 * 41 * @author Administrator 42 * 43 */ 44 public class SetStudent implements Runnable { 45 private Student student; 46 47 // 可以通过构造方法确定操作的是同一个学生 48 public SetStudent(Student student) { 49 this.student = student; 50 } 51 52 // 重写的run方法,让他调用生产学生的方法 53 @Override 54 public void run() { 55 createStudent(); 56 } 57 58 // 生产学生”张三“ 59 public void createStudent() { 60 while (true) { 61 student.setName("张三"); 62 student.setAge(11); 63 } 64 } 65 66 } 67 68 69 /** 70 * 消费学生的类:输出学生 71 * 72 * @author Administrator 73 * 74 */ 75 public class GetStudent implements Runnable { 76 private Student student; 77 78 @Override 79 public void run() { 80 getStudent(); 81 82 } 83 84 public GetStudent(Student student) { 85 this.student = student; 86 } 87 88 // 输出学生 89 public void getStudent() { 90 while (true) { 91 System.out.println(student); 92 } 93 94 } 95 } 96 97 98 public class StudentTest { 99 public static void main(String[] args) { 100 // 主方法创建一个学生,并通过参数传递赋给生产者和消费者,引用变量,传递同一个学生的引用地址,保证操作的都是一个对象 101 Student student = new Student(); 102 SetStudent setStu = new SetStudent(student); 103 GetStudent getStu = new GetStudent(student); 104 // 创建线程 105 Thread setStudent = new Thread(setStu); 106 Thread getStudent = new Thread(getStu); 107 // 开启线程 108 setStudent.start(); 109 getStudent.start(); 110 } 111 } 112 //执行结果: 113 //Student [name=张三, age=11] 114 //Student [name=张三, age=11] 115 //Student [name=张三, age=11] 116 //Student [name=张三, age=11] 117 //Student [name=张三, age=11] 118 //Student [name=张三, age=11] 119 //Student [name=张三, age=11] 120 //Student [name=张三, age=11] 121 //Student [name=张三, age=11] 122 //Student [name=张三, age=11] 123 //Student [name=张三, age=11] 124 //Student [name=张三, age=11] 125 //Student [name=张三, age=11] 126 //Student [name=张三, age=11] 127 //Student [name=张三, age=11] 128 //Student [name=张三, age=11] 129 /** 130 * 这里可以看到生产者和消费者使用的对象都是同一个,但是,如果生产者生产的是两个人,张三和大黄蜂呢? 131 */
原文:https://www.cnblogs.com/19322li/p/10700939.html