zoukankan      html  css  js  c++  java
  • java 10 -01 List接口 多线程 生产消费关系

    集合类:List<Integer>也可以叫接口

        <> 泛型,集合里面放的什么类型的对象。

    int ->  对象的包装类Integer   在成员变量中声明一个int类型的属性,让它有对象的行为。

    集合里面只能放对象,不能放基本类型。

    new一个实现类

    List<Integer> list =new LinkedList<Integer>

    可以放任意数量影替的数量,长度不固定,想放多少就放多少

    数组 length 是属性

    集合 size 是方法

    class TenProductCustor{
    public static void main(String[] agrs) {
    //创建集合
    //new LinkedList<Integer>()构造函数//集合 //泛型
    java.util.List<Integer> list =new java.util.LinkedList<Integer>();
    //向集合中添加元素(对象)
    list.add(new Integer(1));
    list.add(new Integer(2));
    list.add(new Integer(3));
    list.add(new Integer(4));
    System.out.println(list.size());
    //先判断是否为空的 false 开始取
    System.out.println(list.isEmpty());
    System.out.println(list.remove(0));
    System.out.println(list.remove(0));
    System.out.println(list.remove(0));
    System.out.println(list.remove(0));
    //T取完后了  是空的TRUE
    System.out.println(list.isEmpty());

    }

    }

    ----------------------------------------------------------------------------

    消费者与顾客

    class TenProductCustor2{
    public static void main(String[] agrs) {
    java.util.List<Integer> list =new java.util.LinkedList<Integer>();
    Productor p =new Productor(list);
    Cusumer c =new Cusumer(list);
    p.start();
    c.start();

    }

    }

    //生产者

    class Productor extends Thread{
    //创建一个集合
    private java.util.List<Integer> list;
    public Productor(java.util.List<Integer> list){
    this.list=list;
    }

    public void run(){
    int i =1;
    while(true){
    list.add(new Integer(i));
    System.out.println("生产了:"+ i);
    i++;
    }
    }
    }
    //消费者
    class Cusumer extends Thread{
    private java.util.List<Integer> list;
    public Cusumer(java.util.List<Integer> list){
    this.list=list;
    }

    public void run(){
    while(true){
    if(!list.isEmpty()){
    int no = list.remove(0);
    System.out.println("消费了====》"+ no);
    }

    }
    }
    }

    --------------------------------------------------------

    当为互斥关系时 代码如下

    class TenProductCustor3{
    public static void main(String[] agrs) {
    MyList mylist =new MyList();
    Productor p =new Productor(mylist);
    Cusumer c =new Cusumer(mylist);
    p.start();
    c.start();


    }

    }

    //用类封装集合,同步要么往里放,要么取。
    class MyList{
    private int MAX =100;
    private java.util.List<Integer> list =new java.util.LinkedList<Integer>();

    public void addLast(Integer i){

    //同步代码块 ,如果库存小于最大数,添加,直接return
    //如果大于最大数 直接从锁里面出来了。
    while(true){
    synchronized(list){
    if(list.size()<MAX){
    list.add(i);
    System.out.println("生产 Size" +list.size());
    return;
    }
    }
    }
    }
    //上面已经上锁即没有机会了
    public Integer removeFirst(){
    while(true){
    synchronized(list){
    if(!list.isEmpty()){
    System.out.println("消费 Size" +list.size());
    return list.remove(0);
    }
    }

    //x休眠一下效果更明晰
    try{
    Thread.sleep(2000);
    }
    catch(Exception e){

    }
    }
    }

    }


    //生产者

    class Productor extends Thread{
    //创建一个集合
    private MyList mylist;
    public Productor(MyList mylist){
    this.mylist=mylist;
    }

    public void run(){
    int i =1;
    while(true){
    mylist.addLast(i);
    System.out.println("生产了" +i);
    i++;
    }
    }
    }
    //消费者
    class Cusumer extends Thread{
    private MyList mylist;
    public Cusumer(MyList mylist){
    this.mylist=mylist;
    }

    public void run(){
    while(true){
    int no =mylist.removeFirst();
    System.out.println("消费了=====》》" +no);
    }
    }
    }

  • 相关阅读:
    From使用post与使用get区别
    HTML 自动跳转代码
    mjpgstreamer译文
    DOCUMENT.GETELEMENTBYID使用
    查看Linux内核版本的命令
    CGI编程学习5 穿插HTML,CSS零星知识
    使用Javascript显示时间
    北京大学<Perl 循序渐进>
    html之marquee详解
    Apache支持ASP.NET方法浅析
  • 原文地址:https://www.cnblogs.com/simly/p/10531567.html
Copyright © 2011-2022 走看看