java多线程可以用Lock解决同步问题,可以给Lock挂多个监视器condition,
比如我有生产者线程,有消费者线程,现在交给两个线程加锁,通过这个锁
我创建了两个监视器来监视这两种线程,那我怎么知道两个监视器分别监视的是生产者还是消费者呢,希望前辈指点
class Resource {
private String name;
private int count = 1;
private boolean flag = false;
//创建一个锁对象
Lock lock = new ReentrantLock();
//通过已有的锁,获取该锁上的两组监视器对象,一组监视生产者,一组监视消费者
Condition producer_con = lock.newCondition();
Condition consumer_con = lock.newCondition();
public void setResource(String name) {
lock.lock();
try {
while (flag)
try {
producer_con.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
this.name = name + " " + count;
count++;
System.out.println(Thread.currentThread().getName() + " 生产者--" + this.name);
flag = true;
consumer_con.signal();
} finally {
lock.unlock();
}
}
public void getResource() {
lock.lock();
try {
while (!flag)
try {
consumer_con.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + " 消费者——————" + name);
flag = false;
producer_con.signal();
} finally {
lock.unlock();
}
}
}
class Producer implements Runnable {
Resource r;
public Producer(Resource r) {
this.r = r;
}
@Override
public void run() {
while (true) {
r.setResource("烤鸭");
}
}
}
class Consumer implements Runnable {
Resource r;
public Consumer(Resource r) {
this.r = r;
}
@Override
public void run() {
while (true)
r.getResource();
}
}
public class C_001_用两个监视器监视不同的任务 {
public static void main(String[] args) {
Resource r = new Resource();
Producer p1 = new Producer(r);
Producer p2 = new Producer(r);
Consumer c1 = new Consumer(r);
Consumer c2 = new Consumer(r);
Thread t0 = new Thread(p1);
Thread t1 = new Thread(p2);
Thread t2 = new Thread(c1);
Thread t3 = new Thread(c2);
t0.start();
t1.start();
t2.start();
t3.start();
}
}