第9章 IO流、第 10章 多线程

发布于:2023-01-19 ⋅ 阅读:(174) ⋅ 点赞:(0)

 

/*
第9章 IO流
 * OutputStream  write(97/bys),  write(bys,index,2);
 * InputStream   int len=fis.read() !=-1   len=97       int len=fis.read(bys);    (char)len=a
 * 捕获异常标准代码:try{}catch{}finally{}
 * deleteDir(src)
 * getCount(hm,file)
 * 字节流小数组拷贝原理:abcde
 * 字节缓冲流+字节流(主):8192数组    抛出FileNotFoundException
 * 字节缓冲流底层源码:8192数组
 * shift+tab(后):反向缩进
 *OutputStream,InputStream:write(),read()方法
 * 字节缓冲流:+FileWriter:readLine(),writeLine() 跨平台的回车换行
 * FileWriter,FileReader: write,read ,flush,close,FileWriter原码   FileWriter 父类:OutputStreamWriter(其需要字节输出流)
 * String n=str[i];
   int num=Integer.parseInt(n);//integer能在Int和string之间进行转换
   *
   * String n="123";
   * int num=Integer.parseInt(n);//string和int之间转换
   *
   *
   * int[] arr=
   * Arrays.sort(arr);//Arrays针对数组操作
   * Arrays.toString(arr);//数组内容字符串展示
   * 转换流底层:
   * 转换流要带上字节流
   * 空指针异常,IO异常,文件找不到异常,打异常,数字化异常,非法传参异常,不合法字符集名称:illegalCharsetName
   * charset f=charset.forName("GBK");
   *对象操作流:
   * ObjectOutputStream:  writeObject(对象)  把对象写到本地文件,对象序列化,需要Serializable接口
   * Serializable接口:里面没任何抽象方法
   * invalidclassException(不合法类异常) extends ObjectStreamException(对象流异常)
   * 原先序列号和修改后不一样
   * 数据类型不一样
   * 没有无参构造
   *
   * properties,serializable,cloneable,Hashtable<Object,Object>
   <Hashtable<>   <dictionary<k,v>  Object
   * setProperty(),getProperty,load(),store()
 * */
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
/*
第10章  线程
* run(),start()
        ctrl+b,ctrl+t,ctrl+alt+l

        Mycallable extends Callable 要FutureTask<String> ft
        mt.setName("鲜明");??、?

        案例:
        桌子,吃货,厨师            更改Desk类

        同步锁:卖票100->0

        阻塞队列等待唤醒
        ArrayBlockingQueue,4接口,2实现类
        BlockingQueue:put,take方法
        厨师,吃货

        线程六种状态:
        Thread.state?????

        线程池:
        Executors:newCachedThreadPool();
        newFixedThreadPool(2);
        类型:ExecutorService
        ThreadPoolExecutor(getPoolSize())<ExecutorService(接口)<Executor

餐厅员工问题:
        ThreadPoolExecutor r=new ThreadPoolExecutor(2,5,2,
        TimeUnit.SECONDS,
        new ArrayBlockingQueue(1),
        Executors.defaultThreadFactory(),
        Executors.abortPolicy());
        .abortPolicy()->RehectedExecutionException    提交5,只能3+对列1,  拒绝2
        .discardPolicy()     不报异常      同
        .discardOldestPolicy()
        .CallerRunsPolicy()    没有搞完的交给主线程:绕过线程池执行
        */

/*
* 线程安全:
* 1.同步代码快
* 2.同步方法
* 3.锁机制:死锁
* */
/*
* synchronized和CAS的区别:
* */
/*
* HashMap<k,v> , put(k,v),  v=get(k)       new Thread(()->{hm.put(i,i)}).start()
* HashTable:锁数组
* ConcurrentHashTable:自旋+CAS, hash表(大数组+链表+红黑树)
* */
/*
* count++; 有三步,被打乱,用原子性
* volatile关键字
* AtomicInter:
*   ac.get()
* ac.getAndIncrement()
* ac.getAndSet();
* */
/*  new CountDownLatch(3):等待其他的线程运行完在运行
 * await()
 * countDown():1.锁存器 2.递减  总线程数3-2-1,放在哪个线程里都是起到计时器的作用  3.释放自己
 * */
/*
* semaphere:无无参构造,可以序列化
* new semaphere(2);一次拿两张通行证
* semaphere.acquire()    .release()
* */