一,在本例子中,有三个类,dataStore(存放数据类),consumer(消费者),producer(生产者)。
二,看源码例子:
类dataStore:
import java.lang.InterruptedException;
public class dataStore {
private int m_iData = 0;
private boolean m_bSetData = true;
public synchronized void producerData(int iInputData) {// 添加synchronized保证线程同步功能
if (m_bSetData) {
try {
this.wait(); //等待消费者消费
} catch (InterruptedException e) {
System.out.print("InterrupExcepthion put data\n");
}
}
System.out.print("producer: " + iInputData);
m_iData = iInputData;
m_bSetData = true;
this.notify(); //继续生产
}
public synchronized void consumerData() {
if (!m_bSetData) {
try {
this.wait(); //等待生产者产生数据,停止消费
} catch (InterruptedException e) {
System.out.print("InterrupExcepthion get data\n");
}
}
System.out.print("consumer: " + m_iData + "\n");
m_bSetData = false;
this.notify(); //唤醒消费者线程,继续消费。
}
}
consumer代码:
public class consumer implements Runnable{
private dataStore m_data;
public consumer(dataStore d) {
m_data = d;
}
public void run() {
System.out.print("consumer thread run");
while (true) {
m_data.consumerData();
}
}
}
producer代码:
public class producer implements Runnable{
private dataStore m_data;
public producer(dataStore d) {
m_data = d;
}
public void run() {
System.out.print("producer thread run");
int inPutData = 0;
while (true) {
m_data.producerData(inPutData++);
}
}
}
main主线程:
public class cMain {
public static void main(String[] args) {
// TODO Auto-generated method stub
dataStore data = new dataStore();
consumer con = new consumer(data);
Thread consumerThread = new Thread(con);
consumerThread.start(); //启动线程
producer pro = new producer(data);
Thread producerThread = new Thread(pro);
producerThread.start(); //启动线程
}
}