建立两个线程分别为生产销售,建立一个店员对象
两个线程去共享店员productcount数据,以店员对象为锁,优化线程安全问题进行通信
public class Product {
public static void main(String[] args) {
Clerk xxs = new Clerk();
Producer p1 = new Producer(xxs);
Customer c1 = new Customer(xxs);
p1.setName("生产");
c1.setName("出售");
p1.start();
c1.start();
}
}
class Clerk{
private static int productcount;
public synchronized void cutomerproduct() {
if(productcount>0)
{
System.out.println("店员在"+Thread.currentThread().getName()+"第"+productcount+"个产品");
productcount--;
notify();
}else{
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public synchronized void prodeceproduct() {
if(productcount<20)
{
productcount++;
System.out.println("店员在"+Thread.currentThread().getName()+"第"+productcount+"个产品");
notify();
}else{
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class Customer extends Thread{
private Clerk clerk;
public Customer(Clerk clerk) {
this.clerk = clerk;
}
@Override
public void run() {
while(true)
{
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
clerk.cutomerproduct();
}
}
}
class Producer extends Thread{
private Clerk clerk;
public Producer(Clerk clerk){
this. clerk= clerk;
}
@Override
public void run() {
while(true)
{
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
clerk.prodeceproduct();
}
}
}