java多线程实现生产消费模式:
看代码:
苹果篮子类:
public
class
PublicBox {
private
int
apple
= 0;
public
synchronized
void
increace() {
while
(
apple
==5) {
try
{
wait();
}
catch
(InterruptedException e) {
e.printStackTrace();
}
}
apple
++;
System.
out
.println(
"生成苹果成功!"
);
notify();
}
public
synchronized
void
decreace() {
while
(
apple
==0) {
try
{
wait();
}
catch
(InterruptedException e) {
e.printStackTrace();
}
}
apple
--;
System.
out
.println(
"消费苹果成功!"
);
notify();
}
}
两个线程分别代码生产者和消费者:
生产者:
public
class
Producer
implements
Runnable {
private
PublicBox
box
;
public
Producer(PublicBox box) {
this
.
box
= box;
}
@Override
public
void
run() {
for
(
int
i=0;i<10;i++)
{
try
{
System.
out
.println(
"pro i:"
+i);
Thread. sleep(30);
}
catch
(InterruptedException e) {
//
TODO
: handle exception
e.printStackTrace();
}
box
.increace();
}
}
}
消费者:
public
class
Customer
implements
Runnable {
private
PublicBox
box
;
public
Producer(PublicBox box) {
this
.
box
= box;
}
@Override
public
void
run() {
for
(
int
i=0;i<10;i++)
{
try
{
System.
out
.println(
"pro i:"
+i);
Thread. sleep(3000);
}
catch
(InterruptedException e) {
//
TODO
: handle exception
e.printStackTrace();
}
box
.decreace();
}
}
}
建立测试类:
public class Test{
public static void main(args []){
//新建一个苹果篮子对象,用于生产者和消费者往里面放入苹果和取出苹果
PublicBox box=new PublicBox();
//新建生产者
Producer p=new Producer(box);
Customer c=new Producer(box);
Thread t1=new Thread (p);
Thread t2=new Thread (c);
t1.start();
t2.start();
}
}
这里的篮子对象上面的锁是对象锁,一个线程只能操作一个对象实例,notify()是唤醒与其竞争资源的线程