java生产者消费者问题
自己的实现1
package rainbow.test;
import rainbow.test.foods;
public class ThreadTest1 {
public static void main(String[] args) {
foods foo = new foods();
new pro(foo).start();
new cons(foo).start();
}
}
class pro extends Thread{
foods foo = null;
public pro(foods foo){
this.foo = foo;
}
@Override
public void run(){
for(int i = 1; i < 11; i++){
foo.proFood(i);
}
}
}
class cons extends Thread{
foods foo = null;
public cons(foods foo){
this.foo = foo;
}
@Override
public void run(){
while(true){
foo.conFood();
}
}
}
package rainbow.test;
import java.util.LinkedList;
public class foods {
private LinkedList<String> foods = new LinkedList<String>();
private int MAX = 10;
public synchronized void conFood(){
if(foods.size() == 0){
System.out.println("1No Food!");
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("1Got " + foods.getFirst());
foods.removeFirst();
notify();
}
public synchronized void proFood(int index){
if(foods.size() == MAX){
System.out.println("1Full!");
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
if(foods.size() > 0){
System.out.println("1Has food!");
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
foods.addFirst("Food " + index);
System.out.println("1Add new Food: " + index);
notify();
}
}
自己的实现2
package rainbow.test;
import java.util.LinkedList;
public class ThreadTest {
private byte lock[] = new byte[1];
private LinkedList<String> foods = new LinkedList<String>();
private int MAX = 10;
public static void main(String[] args) {
new ThreadTest();
}
public ThreadTest(){
new pro().start();
new con().start();
}
class pro extends Thread{
@Override
public void run(){
for(int i = 1; i < 10; i++){
synchronized(lock){
if(foods.size() == MAX){
System.out.println("List full!");
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
if(foods.size() > 0){
System.out.println("Has food!");
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("Add new Food: " + i);
foods.addFirst("Food: " + i);
lock.notify();
}
}
}
}
class con extends Thread{
@Override
public void run(){
while(true){
synchronized(lock){
if(foods.size() == 0){
System.out.println("No Food!");
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("Got " + foods.getFirst());
foods.removeFirst();
lock.notify();
}
}
}
}
}
feiyue3008

浙公网安备 33010602011771号