2012年计算机二级Java多线程之间的通讯学习教程

来源:计算机等级考试    发布时间:2012-08-29    计算机等级考试视频    评论

7.3 多线程之间的通讯

  7.3.1 生产者和消费者

  多线程的一个重要特点是它们之间可以互相通讯。你可以设计线程使用公用对象,每个线程都可以独立操作公用对象。典型的线程间通讯建立在生产者和消费者模型上:一个线程产生输出;另一个线程使用输入。

  buffer让我们创建一个简单的"Alphabet Soup"生产者和相应的消费者.

  7.3.2 生 产 者

  生产者将从thread类里派生:

  class Producer extends Thread {

  private Soup soup;

  private String alphabet = " ABCDEFGHIJKLMNOPQRSTUVWXYZ";

  public Producer(Soup s) {

  //Keep our own copy of the shared object

  this.soup = s;

  }

  public void run() {

  char c; //Throw 10 letters into the soup

  for (int i=0;i<10;i++) {

  c = alphabet.charAt((int)(Math.random() *26));

  soup.add(c); //print a record of osr addition

  System.out.println("Added"+c + "to the soup.");

  //wait a bit before we add the next letter

  try {

  sleep((int)(Math.random() *1000));

  }

  catch (InterruptedException e) {

   //

  }

  }

  }

  }

  注意我们创建了Soup类的一个实例。生产者用soup.add()函数来建立字符池。

  7.3.3 消费者

  让我们看看消费者的程序:

  public class Consumer extends Thread {

  private Soup soup;

  public Consumer (Soup s) {

  //keep our own copy of the shared object

  this.soup = s;

  }

  public void run() {

  char c;

  //Eat 10 letters from the alphabet soup

  for (int I=0 ;i<10;i++) {

  //grab one letter

  this.c = soup.eat();

  //Print out the letter that we retrieved

  System.out.println("Ate a letter: " +c); //

  try {

  sleep((int)(Math.raddom()*2000));

  }

  catch (InterruptedException e) {

  }

  ` }

  }

  }

  同理,象生产者一样,我们用soup.eat()来处理信息。那么,Soup类到底干什么呢?

上一页12下一页

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答