zoukankan      html  css  js  c++  java
  • IO体系、集合体系、多线程、jdbc

    存储方式:1.顺序结构 2.链式存储

    1.数据的存储的“容器”:

      ①数组 int[] arr = new int[10]

      ②集合

    Collection:用来存储一个一个的数据

      |-----Set:存储无序的、不可重复的数据--相当于高中的"集合"--“哈希算法”

        |----HashSet:主要的实现类

          |----LinkedHashSet:对于频繁的遍历,效率高

        |----TreeSet:可以按照添加的元素的指定属性进行排序遍历(自然排序Comparable(compareTo(Object obj))&定制排序Comparator(compare(Obejct obj1,Object obj2)))

      |-----List:存储有序的、可以重复的数据--相当于"动态"数组

        |----ArrayList:主要实现类,线程不安全的

        |----LinkedList:对于频繁的插入、删除操作,效率高于ArrayList

        |----Vector:古老的实现类,线程安全的

    Map:用来存储一对一对的数据(key-value)

      |----HashMap

        |----LinkedHashMap

      |----TreeMap  

      |----Hashtable

        |----Properties


    //原则:添加自定义类的对象到Set中时,需要自定义对象所在的类重写:equals()且hashCode();

    @Test
        public void test1() throws Exception {
            RandomAccessFile raf = new RandomAccessFile(new File("hello.txt"), "rw");
        
    //        raf.seek(7);
    //        raf.write("xyz".getBytes());
    //        
    //        raf.close();
            //1.
            raf.seek(7);
            StringBuffer sb = new StringBuffer();
            byte[] b = new byte[20];
            int len;
            while((len = raf.read(b)) != -1){
                String str = new String(b,0,len);
                sb.append(str);
            }
            //2.
            raf.seek(7);
            raf.write("xyz".getBytes());
            raf.write(sb.toString().getBytes());
            
            raf.close();
        }
    class Clerk{//店员
        int product;
        
        public synchronized void consumeProduct(){//消费产品
            if(product <= 0){
                try {
                    wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }else{
                System.out.println(Thread.currentThread().getName() + ":消费了第" + product + "个产品");
                product--;
                notifyAll();
            }
        }
        
        public synchronized void addProduct(){//生产产品
            if(product >= 20){
                try {
                    wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }else{
                product++;
                System.out.println(Thread.currentThread().getName() + ":生产了第" + product + "个产品");
                notifyAll();
            }
        }
    }

    消费者:

    class Comsumer implements Runnable{//消费者
        Clerk clerk;
        public Comsumer(Clerk clerk){
            this.clerk = clerk;
        }
        @Override
        public void run() {
            System.out.println("消费者开始消费产品");
            while(true){
                try {
                    Thread.sleep((int)(Math.random() * 1000));
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                clerk.consumeProduct();
                
            }
        }
    }

    生产者:

    class Productor implements Runnable{//生产者
        Clerk clerk;
        
        public Productor(Clerk clerk){
            this.clerk = clerk;
        }
    
        @Override
        public void run() {
            System.out.println("生产者开始生产产品");
            while(true){
                try {
                    Thread.sleep((int)(Math.random() * 1000));
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                clerk.addProduct();
            }
        }
    }

    测试:

    public class TestProduct {
        public static void main(String[] args) {
            Clerk clerk = new Clerk();
            
            Productor p1 = new Productor(clerk);
            Thread t1 = new Thread(p1);//创建了一个生产者
            Thread t2 = new Thread(p1);
            
            Comsumer c1 = new Comsumer(clerk);
            Thread tt1 = new Thread(c1);//创建了一个消费者
            
            t1.start();
            t2.start();
            tt1.start();
            
        }
    }
  • 相关阅读:
    【Hive】HiveQL:数据定义
    【Hive】Hive安装与配置
    【Hadoop】Hadoop 2.7.6安装_伪分布式集群
    【RMAN】单实例环境RMAN备份和还原
    【SQL开发】Oracle 11g 分区技术
    【SQL开发】使用绑定变量 VS 不使用绑定变量
    MySQL索引最左前缀原则导致系统瘫痪
    阿里云RDS在线DDL工具gh-ost
    centos7下MongoDB3.4安装并解决告警
    ibtmp1文件过大
  • 原文地址:https://www.cnblogs.com/lzb0803/p/9201365.html
Copyright © 2011-2022 走看看