java多线程

作者: 文艺小年青 | 来源:发表于2017-09-21 20:38 被阅读0次

生产者与消费者问题

package xianPack;

//生产者    消费者
public class Test10 {

    public static void main(String[] args) {
        
        final Apple apple = new Apple();
        
        //吃苹果的人      (上下两种方法一样)
        new Thread(new Runnable() {
            public void run() {
                try {
                    apple.eat();
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        },"线程1").start();
        
        Thread thread1 = new Thread(new Runnable() {
            public void run() {
                try {
                    apple.eat();
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        },"线程2");
        thread1.start();
        
        //种苹果的
        new Thread(new Runnable() {
            public void run() {
                try {
                    apple.plant();
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        },"线程3").start();
        
        new Thread(new Runnable() {
            public void run() {
                try {
                    apple.plant();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        },"线程4").start();
        
    }
}

class Apple {
    
    int num = 0;   //苹果的数量
    
    //吃苹果
    void eat() throws InterruptedException {
        while (true) {
            synchronized (this) {
                if (num > 0) {
                    num--;
                    Thread thread = Thread.currentThread();
                    System.out.println(thread.getName() + "吃苹果,剩下" + num);
                    //并且通知种苹果的种
                    notifyAll(); 
                }else {   //没有苹果了
                    //进入等待状态
                    wait();
                    //并且通知种苹果的种
                    //notify();    //通知一个
                }
            }
            
        }
    }
    
    //种苹果
    void plant() throws InterruptedException {
        while (true) {
            //锁放在里边  一边吃一边种
            synchronized (this) {
                //如果生产大于20个,停止生产
                if (num < 20) { 
                    this.num++;
                    Thread thread = Thread.currentThread();
                    System.err.println(thread.getName() + "种苹果,剩下" + num);
                    
                    //通知吃苹果的吃
                    notifyAll();    //通知所有的
                }else {     //苹果太多  不能生产了
                    //等待
                    wait();
                }
            }
            
        }
    }
    
    
}

相关文章

  • 带你搞懂Java多线程(五)

    带你搞懂Java多线程(一)带你搞懂Java多线程(二)带你搞懂Java多线程(三)带你搞懂Java多线程(四) ...

  • 带你搞懂Java多线程(六)

    带你搞懂Java多线程(一)带你搞懂Java多线程(二)带你搞懂Java多线程(三)带你搞懂Java多线程(四)带...

  • Java多线程目录

    Java多线程目录 Java多线程1 线程基础Java多线程2 多个线程之间共享数据Java多线程3 原子性操作类...

  • java多线程--Callable

    **移步[java多线程系列文章]Java多线程(二十二)---LockSupport工具Java 停止线程 一、...

  • android 多线程 — 线程的面试题和答案

    这里都是我从各个地方找来的资料,鸣谢: Java多线程干货系列—(一)Java多线程基础 JAVA多线程和并发基础...

  • 5月份第一周学习安排

    学习内容: java多线程及线程同步的方法(使用) java多线程各种同步方法的原理和优缺点 java多线程设计模...

  • 带你搞懂Java多线程(四)

    带你搞懂Java多线程(一)带你搞懂Java多线程(二)带你搞懂Java多线程(三) 什么是线程间的协作 线程之间...

  • Java基础(六)

    多线程 Java多线程并发 1.1 JAVA 并发知识库 1.2 JAVA 线程实现/创建方式 1.2.1 继承 ...

  • (五) volatile关键字

    Java多线程目录 1 背景 理解Java多线程的内存抽象逻辑请阅读java多线程内存模型,当代操作系统,处理器为...

  • Java多线程高级特性(JDK8)

    [TOC] 一、Java多线程 1.Java多线程基础知识 Java 给多线程编程提供了内置的支持。一条线程指的是...

网友评论

    本文标题:java多线程

    本文链接:https://www.haomeiwen.com/subject/panysxtx.html