姿姿霸霸~~!
贵在坚持!
posts - 106,  comments - 50,  trackbacks - 0

先来个小总结:

yield()使当前线程暂停。但设置了setPriority(Thread.MAX_PRIORITY);时,yield()不咋管用了。

一般只需要重写run()方法的话,实现runnalbe接口比较方便。

如果在进程类里面需要访问同一个变量的话,就实现接口。如果用继承类的话,同一个变量就有几份的拷贝。但是内部类继承类的结和继承接口的效果一样。

启动一个线程
MyThread mt=new MyThread();
new Thread(mt).start();

好多东西都有时间片。时间片是个不确定的东西。

当调用wait(),notify()方法时,应该保证他们是同一个对象sy也要同一个对象。synchronized 中 才能有wait(),notify()方法。

synchronized(Object obj)与synchronized(this)的区别?!(谁能告诉我!!!!!)


下面是生产者与消费者的例子,为了方便,几个类直接写在一起了。


//new 生产者,消费者,队列。并起用生产者,消费者的线程
public class Test {

 public static void main(String[] args) {

  Queue q = new Queue();
  Producer p = new Producer(q);
  Consumer c = new Consumer(q);
  p.start();
  c.start();
 }
}

//生产者,每生产好一个东西后,就往队列中放一个
class Producer extends Thread {

 Queue q;

 Producer(Queue q) {
  this.q = q;
 }

 public void run() {
  for (int i = 0; i < 10; i++) {
   q.setValue(i);
   System.out.println("Producer put:" + i);
  }
 }
}

//消费者,每当队列中有东西通知时,就从队列去拿
class Consumer extends Thread {

 Queue q;

 Consumer(Queue q) {
  this.q = q;
 }

 public void run() {
  while (true) {
   System.out.println("Consumer get:" + q.getValue());
  }
 }
}

//队列
class Queue {

 int value;
 boolean flag = false;

 //生产者往这放它所生产的东西
 public synchronized void setValue(int i) {
  //当生产好一个往队列中放了后,放置一个标志。发个通知,告诉说生产好了,并等待消费者来拿
  if (!flag) {
   value = i;
   flag = true;
   notify();
  }
  try {
   wait();
  } catch (InterruptedException e) {
   e.printStackTrace();
  }
 }

 //消费者从这获取东西
 public synchronized int getValue() {
  //消费这先判断队列是否有东西了,有的话,就让其他线程等待,自己取拿,拿好后设置一个标志,发个通告告诉其他线程,我拿好了
  if (!flag) {
   try {
    wait();
   } catch (InterruptedException e) {
    e.printStackTrace();
   }
  }
  flag = false;
  notify();
  return value;
 }
}

posted on 2007-01-15 00:27 xrzp 阅读(841) 评论(0)  编辑  收藏 所属分类: JAVA

只有注册用户登录后才能发表评论。


网站导航:
 

<2007年1月>
31123456
78910111213
14151617181920
21222324252627
28293031123
45678910

常用链接

留言簿(4)

随笔分类

随笔档案

好友的blog

搜索

  •  

积分与排名

  • 积分 - 116539
  • 排名 - 500

最新评论

阅读排行榜

评论排行榜