题目及示例代码
package product2;
class Clerk{
private int productCount = 0;
public synchronized void produceProduct() {
if(productCount < 20){
productCount++;
System.out.println(Thread.currentThread().getName() + ":开始生产第" + productCount + "个产品");
notify();
}else{
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public synchronized void consumeProduct() {
if(productCount > 0){
System.out.println(Thread.currentThread().getName() + ":开始消费第" + productCount + "个产品");
productCount--;
notify();
}else{
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class Producer extends Thread{
private Clerk clerk;
public Producer(Clerk clerk) {
this.clerk = clerk;
}
@Override
public void run() {
System.out.println(getName() + ":开始生产产品.....");
while(true){
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
clerk.produceProduct();
}
}
}
class Consumer extends Thread{
private Clerk clerk;
public Consumer(Clerk clerk) {
this.clerk = clerk;
}
@Override
public void run() {
System.out.println(getName() + ":开始消费产品.....");
while(true){
try {
Thread.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
clerk.consumeProduct();
}
}
}
public class ProductTest {
public static void main(String[] args) {
Clerk clerk = new Clerk();
Producer p1 = new Producer(clerk);
p1.setName("生产者1");
Consumer c1 = new Consumer(clerk);
c1.setName("消费者1");
Consumer c2 = new Consumer(clerk);
c2.setName("消费者2");
p1.start();
c1.start();
c2.start();
}
}
自己写的垃圾代码
package product;
public class ProductTest {
public static void main(String[] args) {
Productor productor = new Productor();
Customer customer = new Customer();
productor.start();
customer.start();
}
}
class Productor extends Thread{
public int count = 0;
public void run() {
while(count<=50) {
synchronized (Clerk.class) {
if (Clerk.produces == 20) {
try {
Clerk.class.wait();
} catch (Exception e) {
e.printStackTrace();
}
}
Clerk.addProduce(1);
count++;
System.out.println("Productor:" + count);
Clerk.class.notifyAll();
}
}
}
}
class Customer extends Thread{
public int count = 0;
public void run(){
while(count<=50) {
synchronized (Clerk.class) {
if (Clerk.produces == 0) {
try {
Clerk.class.wait();
} catch (Exception e) {
e.printStackTrace();
}
}
Clerk.getProduce(1);
count++;
System.out.println("Customer:" + count);
if (Clerk.produces < 20) {
Clerk.class.notifyAll();
}
}
}
}
}
class Clerk{
public static int produces = 0;
public static void addProduce(int p){
produces += p;
}
public static void getProduce(int p){
produces -= p;
}
}