复习java线程,然后实现生产者与消费者问题,4个文件代码如下:
1.生产者:
/**
* producer.java
* xmlanalysis
* 2011-8-26
*/
package com.lyjilu.thread;
import java.util.List;
/**
* @author dawn.liu 2011-8-26 上午10:54:22
*/
public class Producer extends Thread {
/**
*
*/
public Producer() {
}
public Producer(String name) {
this.Threadname = name;
}
public Producer(String name, List<Object> list) {
this.list = list;
this.Threadname = name;
}
/**
* 用于标识线程
*/
private String Threadname;
/**
* 要操作的list
*/
private List<Object> list;
/*
* (non-Javadoc)
*
* @see java.lang.Runnable#run()
*/
@Override
public void run() {
for (int i = 0; i < 10; i++) {
synchronized (list) {
list.add(Threadname + i);
System.out.println("Producer[" + Threadname + "]: "
+ Threadname + i);
try {
list.notify();
list.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
System.out.println(Threadname + " is out");
}
}
2、消费者:
/**
* Customer.java
* xmlanalysis
* 2011-8-26
*/
package com.lyjilu.thread;
import java.util.List;
/**
* @author dawn.liu 2011-8-26 上午11:00:46
*/
public class Customer extends Thread {
private List<Object> list;
public Customer() {
}
public Customer(List<Object> list) {
this.list = list;
}
/*
* (non-Javadoc)
*
* @see java.lang.Runnable#run()
*/
@Override
public void run() {
for (int i = 0; i < 1000; i++) {
synchronized (list) {
if (list.size() > 0) {
Object o = list.get(list.size() - 1);
list.remove(list.size() - 1);
System.out.println("Customer : " + o);
if (list.size() == 0)
try {
list.wait(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
list.notify();
}
}
}
}
}
3.公共资源类:
/**
* ResourceList.java
* xmlanalysis
* 2011-8-26
*/
package com.lyjilu.thread;
import java.util.List;
import java.util.Vector;
/**
* @author dawn.liu
* 2011-8-26 上午10:58:47
*/
public class ResourceList {
public List<Object> list = new Vector<Object>(1000);
}
4.最后是测试类:
/**
* Main.java
* xmlanalysis
* 2011-8-26
*/
package com.lyjilu.thread;
import java.util.List;
/**
* @author dawn.liu
* 2011-8-26 上午11:01:05
*/
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
ResourceList res = new ResourceList();
List<Object> list = res.list;
Producer p1 = new Producer("First",list);
Producer p2 = new Producer("Second",list);
Producer p3 = new Producer("Third",list);
Producer p4 = new Producer("Fourth",list);
Producer p5 = new Producer("Fifth",list);
Producer p6 = new Producer("Sixth",list);
Customer c = new Customer(list);
p1.start();
p2.start();
p3.start();
p4.start();
p5.start();
p6.start();
c.start();
}
}
采用通过唤醒与等待方式,作为学习备忘
要产生一个线程很简单,继承Thread 或实现 Runnable,
API例子的代码:
class PrimeThread extends Thread {
long minPrime;
PrimeThread(long minPrime) {
this.minPrime = minPrime;
}
public void run() {
// compute primes larger than minPrime
. . .
}
}
--------------------------------------------------------------------------------
然后,下列代码会创建并启动一个线程:
PrimeThread p = new PrimeThread(143);
p.start();
第二种:
class PrimeRun implements Runnable {
long minPrime;
PrimeRun(long minPrime) {
this.minPrime = minPrime;
}
public void run() {
// compute primes larger than minPrime
. . .
}
}
--------------------------------------------------------------------------------
然后,下列代码会创建并启动一个线程:
PrimeRun p = new PrimeRun(143);
new Thread(p).start();