生产者和消费者
生产者和消费者问题 Synchronized 版
public class Data {
private int num=0;
public synchronized void increat() throws InterruptedException {
while (num!=0){
this.wait();
}
num++;
System.out.println(Thread.currentThread().getName()+num);
this.notifyAll();
}
public synchronized void decreat() throws InterruptedException {
while (num==0){
this.wait();
}
num--;
System.out.println(Thread.currentThread().getName()+num);
this.notifyAll();
}
}
public class Pc {
public static void main(String[] args) {
Data data=new Data();
new Thread(()->{
for (int i = 0; i < 20; i++) {
try {
data.increat();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
},"A").start();
new Thread(()->{
for (int i = 0; i < 20; i++) {
try {
data.decreat();
} catch (InterruptedException e) {
}
}
},"B").start();
}
}
JUC版的生产者和消费者问题
public class Data {
private int num = 0;
Lock lock = new ReentrantLock();
Condition condition1 = lock.newCondition();
Condition condition2 = lock.newCondition();
Condition condition3 = lock.newCondition();
public void A() {
lock.lock();
try {
while (num != 0) {
condition1.await();
}
System.out.println(Thread.currentThread().getName() + num);
num = 1;
condition2.signal(); //指定唤醒
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}
public void B() {
lock.lock();
try {
while (num != 1) {
condition2.await();
}
System.out.println(Thread.currentThread().getName() + num);
num = 2;
condition3.signal();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}
public void C() {
lock.lock();
try {
while (num != 2) {
condition3.await();
}
System.out.println(Thread.currentThread().getName() + num);
num = 0;
condition1.signal();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
lock.unlock();
}
}
}
public class Pc {
public static void main(String[] args) {
Data data = new Data();
new Thread(()->{for (int i = 0; i < 10; i++) data.A();},"A").start();
new Thread(()->{for (int i = 0; i < 10; i++) data.B();},"B").start();
new Thread(()->{for (int i = 0; i < 10; i++) data.C();},"C").start();
}
}
浙公网安备 33010602011771号