Java synchronized、wait、notify实现线程(生成消费者模式)

调用线程对象的run方法不会产生一个新的线程,虽然可以达到相同的执行结果,但执行过程和执行效率不同



package com.thread.wsleep.example1;

public class Hint {

private int count;

public int getCount() {
return count;
}


public void setCount(int count) {
this.count = count;
}

public void product()
{
this.setCount(this.getCount() + 1);
}
public void consume()
{
this.setCount(this.getCount() - 1);
}

}

=====================================================


package com.thread.wsleep.example1;


public class Thread1 implements Runnable {


private Hint hint;
public Thread1(Hint hint)
{
this.hint = hint;
}
@Override
public void run() {
try
{
synchronized(hint)
{
while(true)
{
while(this.hint.getCount()<10)
{
this.hint.product();
System.out.println("thread1 count:" + this.hint.getCount());
}

this.hint.notify();
this.hint.wait();
}
}
}
catch(Exception e)
{
e.printStackTrace();
}
}

public Hint getHint() {
return hint;
}
public void setHint(Hint hint) {
this.hint = hint;
}


}

=========================================================


package com.thread.wsleep.example1;


public class Thread2 implements Runnable {


private Hint hint;
public Thread2(Hint hint)
{
this.hint = hint;
}

@Override
public void run() {
try
{
synchronized(hint)
{
while(true)
{
while (this.hint.getCount() > 5)
{
this.hint.consume();
System.out.println("thread2 count: " + this.hint.getCount());
}
this.hint.notify();
this.hint.wait();
}
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
public Hint getHint() {
return hint;
}
public void setHint(Hint hint) {
this.hint = hint;
}


}

=============================================================


package com.thread.wsleep.example1;


public class Main {


/**
* @param args
*/
public static void main(String[] args) {
Hint hint = new Hint();
new Thread(new Thread1(hint)).start();
try
{
Thread.sleep(5000);
}
catch (Exception e)
{
e.printStackTrace();
}
new Thread(new Thread2(hint)).start();
}


}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值