|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
这种关于生产者和消费者的代码
- //生产产品
- public synchronized void produceProduct() {
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- if(productCount < 20){
- productCount++;
- System.out.println(Thread.currentThread().getName() + ":开始生产第" + productCount + "个产品");
- notify();
- }else{
- //等待
- try {
- wait();
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }
- //消费产品
- public synchronized void consumeProduct() {
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- if(productCount > 0){
- System.out.println(Thread.currentThread().getName() + ":开始消费第" + productCount + "个产品");
- productCount--;
- notify();
- }else{
- //等待
- try {
- wait();
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }
复制代码
消费者和生产者的run()里调用的是这两段代码,我把sleep()放进同步里,执行好几遍,结果都是生产者要生产够20个,消费者才开始消费。但是如果把sleep()放在run()里,那就是有一定的交替。
不太明白,一开始消费者肯定是wait,但生产者生产出一个产品后,就把消费者唤醒了啊,以后按道理消费者是有可能在生产者没wait前,拿到cpu执行权的啊 |
|