编写多线程程序,实现生产者、消费者线程,并实现线程的同步:
(1)生产者线程产生20个数,消费者线程输出生产者线程产生的这20个数。
(2)使用线程的同步与协调机制使二者达到如此效果:产生一个数,取出一个数。
public class Buffer {
int value;
boolean flag = false;
public synchronized int getValue(){
if(!flag){
try {
wait(); //如果还没有执行set,则等待set线程的执行。
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(" getValue--"+value); //输出get的value值
flag = false;
notify(); //唤醒set线程
return value;
}
public synchronized void setValue(int value) {
if(flag){
try {
wait(); //如果没有执行get,等待value被get
} catch (InterruptedException e) {
e.printStackTrace();
}
}
this.value = value;
System.out.println("setValue--"+value);
flag = true;
notify();
}
}public class Set extends Thread{
Buffer buffer;
public Set(Buffer buffer){
this.buffer = buffer;
}
@Override
public void run() {
for(int i = 0; i < 20; i++){
buffer.setValue(i);
}
}
}
public class Get extends Thread{
Buffer buffer;
public Get(Buffer buffer){
this.buffer = buffer;
}
@Override
public void run() {
for(int i = 0; i < 20; i++){
buffer.getValue();
}
}
}
本文介绍了一个简单的Java多线程程序,通过生产者消费者模式实现了线程间的同步与协调。程序中定义了一个缓冲区类Buffer,用于存储生产者产生的数据,并由消费者取出。生产者线程Set负责生成0到19的整数,消费者线程Get负责从缓冲区取出这些整数。通过synchronized关键字和wait/notify方法确保了线程的安全性和同步。
2298

被折叠的 条评论
为什么被折叠?



