标签:
范例:Info.java
1 public class Info { 2 3 private String name="王sir"; 4 private String Content="JAVA讲师"; 5 public String getName() { 6 return name; 7 } 8 public void setName(String name) { 9 this.name = name; 10 } 11 public String getContent() { 12 return Content; 13 } 14 public void setContent(String content) { 15 Content = content; 16 } 17 18 }
范例:生产者
1 public class Producer implements Runnable { 2 3 private Info info = null; 4 5 public Producer(Info info) { 6 this.info = info; 7 } 8 @Override 9 public void run() { 10 11 boolean flag = false; 12 for (int i = 0; i < 50; i++) { 13 if (flag) { 14 this.info.setName("王sir"); 15 try { 16 Thread.sleep(90); 17 } catch (InterruptedException e) { 18 e.printStackTrace(); 19 } 20 this.info.setContent("JAVA講師"); 21 flag = false; 22 } else { 23 this.info.setName("張sir"); 24 try { 25 Thread.sleep(90); 26 27 } catch (InterruptedException e) { 28 e.printStackTrace(); 29 } 30 this.info.setContent("C#講師"); 31 flag = true; 32 } 33 } 34 } 35 }
范例:消费者
1 public class Consumer implements Runnable { 2 3 private Info info = null; 4 5 public Consumer(Info info) { 6 this.info = info; 7 } 8 9 @Override 10 public void run() { 11 for (int i = 0; i < 50; i++) { 12 try { 13 Thread.sleep(100); 14 } catch (InterruptedException e) { 15 e.printStackTrace(); 16 } 17 System.out.println(this.info.getName() + "-->" 18 + this.info.getContent()); 19 } 20 } 21 22 }
范例:主调方法
1 public class ThreadCaseDemo { 2 3 public static void main(String[] args) { 4 Info i = new Info(); 5 Producer pro = new Producer(i); 6 Consumer con = new Consumer(i); 7 new Thread(pro).start(); 8 new Thread(con).start(); 9 } 10 }
范例:运行结果
張sir-->JAVA講師
王sir-->JAVA講師
王sir-->C#講師
張sir-->JAVA講師
王sir-->C#講師
張sir-->JAVA講師
王sir-->C#講師
張sir-->JAVA講師
王sir-->C#講師
張sir-->JAVA講師
王sir-->JAVA講師
王sir-->JAVA講師
王sir-->JAVA講師
王sir-->JAVA講師
王sir-->JAVA講師
王sir-->JAVA講師
线程的运行是由CPU调度决定的,具有不容忽视的不确定性,所以在线程的使用中,存在2点问题:
1.假设生产者线程刚向数据存储空间添加了信息的名称,还没有加入该信息的内容,程序就切换到了消费者线程,消费者线程将把信息的名称和上一个信息的内容联系到一起。(同步问题)
2.生产者放了若干次的数据,消费者才开始取数据,或者是,消费者取完一个数据后,还没等到生产者放入新的数据,有重复取出已取过的数据。
标签:
原文地址:http://www.cnblogs.com/meiCode/p/4611303.html