生产者消费者模式
生产者->仓库->消费者
生产者一直在生产放入仓库中。消费者一直从仓库中取出来消费。线程同步
package shengchan.xiaofei;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class ShengchanxiaofeiActivity extends Activity {
/** Called when the activity is first created. */
Button proBtn;
Button comBtn;
private final String TAG="scxf";
PublicResource resource;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
init();
}
private void init(){
proBtn=(Button)findViewById(R.id.button1);
comBtn=(Button)findViewById(R.id.button2);
proBtn.setOnClickListener(new click());
comBtn.setOnClickListener(new click());
resource = new PublicResource();
}
class click implements OnClickListener{
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.button1:
Log.e(TAG, "button1-->onclick--生产开始");
new Thread(new ProducerThread(resource)).start();
break;
case R.id.button2:
Log.e(TAG, "button2-->onclick--消费开始");
new Thread(new ConsumerThread(resource)).start();
break;
}
}
}
public class PublicResource {
private int number = 0;
/**
* 增加公共资源
*/
public synchronized void increace() {
while (number != 0) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
number++;
System.out.println("生产了->"+number);
notify();
}
/**
* 减少公共资源
*/
public synchronized void decreace() {
while (number == 0) {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
number--;
System.out.println("消费了->"+number);
notify();
}
}
public class ProducerThread implements Runnable {
private PublicResource resource;
public ProducerThread(PublicResource resource) {
this.resource = resource;
}
@Override
public void run() {
while (true) {
resource.increace();
}
}
}
/**
* 消费者线程,负责消费公共资源
*/
public class ConsumerThread implements Runnable {
private PublicResource resource;
public ConsumerThread(PublicResource resource) {
this.resource = resource;
}
@Override
public void run() {
while (true) {
resource.decreace();
}
}
}
}
本文配套源码下载地址: http://download.csdn.net/detail/kyrinleo/6843017
本文参考:http://blog.csdn.net/shijinupc/article/details/7250407