2021-08-01

线程池:
工作原理:线程池里面有很多个线程,由线程池这个容器维护
①有很多任务(task)处于一个队列(Queue)状态
②线程池容器分配一个线程对象(thread),负责处理线程任务task,此时这个线程就处于被占用状态。有其它任务又进来了,线程池容器分配其它线程对象来处理!
③一旦处理任务(task)的线程执行任务结束,它就空闲了(并不释放掉),又有新的任务抵达 ,那么它可能又会被线程池容器分配去处理任务!
④综上所述,我们都是在重复利用线程池里面的线程来处理任务,没有将里面的线程对象销毁释放!
优点:减少系统资源的利用
创建方式:
ExecutorService theadPool= Executors.newFixedThreadPool(int num);
方法:
theadPool.submit(线程对象);

线程的六个状态:
new:创建线程对象
就绪:调用start()方法等待cpu调度
运行:开始运行
堵塞:没有拿到锁
无线等待:wait();只能被其他线程唤醒
计时等待:wait(long times)(醒后没有锁对象)sleep(long times)(醒后直接拿到锁对象)
被终止:死亡

Lamdba:
使用条件:必须是函数式接口(有且仅有一个抽象方法的是函数式表达式)
标准格式:(参数类型,变量名)->{代码块}
(int a,int b)->{代码块}
例:new Thead(()->{System.out.println(“HelloWorld”);}).start;
简化格式:
(a,b)->{代码块};
如果只有一句可以省略大括号 return和分号,必须一起省略
(a,b)->语句
如果只有一个参数的话可以省略小括号
a->语句
Stream流:
单列集合获取流方式:
list.stream();
set.stream();
双列集合获取流方式:
map.keySet().stream();
map.entrySet().stream();
map.value().stream();
数组获取流方式:
Stream.of(数组);
流获取数组:
Stream.toArray(流对象):获取一个object类型的数组
Stream.toArray(数据类型[]::new)获取指定类型的数组
流方法:
filter:过滤
limit:获取前几个
skip:跳过几个获取
map();映射,可以把数据映射成一个对象
concat():将两个流合并
foreach():逐一处理
count():统计个数
注意:
1.流必须要用终结方法(foreach,count)不然不会执行
2.创建出来的流只能用一次,被终结了以后就不能使用了
3.除去终结方法都有返回值,所以可以使用链式

 List <String>list=new ArrayList();
        list.add("张三");
        list.add("李四");
        list.add("王五");
        list.add("张六");
        //filter过滤,获取姓张的
        list.stream().filter(s->s.startsWith("张")).forEach(s-> System.out.println(s));//张三,张六
             //limit获取前几个
        list.stream().limit(2).forEach(s-> System.out.println(s));//张三,李四
        //skip跳过几个
        list.stream().skip(1).forEach(s-> System.out.println(s));//李四,王五,张六
        //count统计个数
        System.out.println(list.stream().count());//4
          //创建Student对象,创建有参构造,用map映射创建对象
        list.stream().map(s->list1.add(new Student(s))).count();
        System.out.println(list1);
        Stream.concat(list.stream().filter(s->s.startsWith("李")),list.stream().filter(s->s.startsWith("王"))).forEach(s-> System.out.println(s));//李四,王五

File
常用构造方法:
File file=new File(“String path”);
ps:一个File对象代表硬盘中实际存在的一个文件或者目录。**无论该路径下是否存在文件或者目录,都不影响File对象的创建。
File获取功能的方法:
getPath():获取file对象的相对路径
getAbsolutePath():获取file对象的绝对路径,如果没有盘符默认项目根目录
getName():获取file对象表示的文件或者目录的名字
length();获得file对象的字节大小(如果是文件就获取真实字节,如果是目录或者不存在就返回值0);
ps:有后缀的名字不一定就是文件还可能是目录(d:/io/a.txt a.txt可能就是个目录)

    File file=new File("d:/io/a.txt");
        //获取相对路径
        System.out.println(file.getPath());//io/a.txt
        //获取绝对路径,如果没有盘符就根据相对项目根目录
        System.out.println(file.getAbsolutePath());//D:\IDEAproject\Yuxi\io\a.txt
        //获取file对象表示的文件或者目录的名称
        System.out.println(file.getName());//a.txt
        //获取file对象如果是文件的字节大小(如果不存在就是0)
        System.out.println(file.length());//0

File类判断功能的方法
exists():判断file对象是否真实存在
isFile():判断file对象是否是文件
isDircetory():判断对象是否为目录

//exists():判断这个file对象是否真是存在
        System.out.println(file.exists());//true
        //判断file对象是不是目录
        System.out.println(file.isDirectory());//false
        //判断file对象是不是文件
        System.out.println(file.isFile());//true

File类创建删除功能的方法
creatNewFile();当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。
delete():删除由此File表示的文件或目录。 【如果File表示目录,则目录必须为空才能
mkdir():创建由此File表示的目录
mkdirs():创建由此File表示的目录,如果是多级目录,父级目录不存在时会一并创建
File目录的遍历
list() :// 返回一个String数组,表示该File目录中的所有子文件或目录。
listFiles() :// 返回一个File数组,表示该File目录中的所有的子文件或目录。

  //list()  :// 返回一个String数组,表示该File目录中的所有子文件或目录。
        String[] list = file.list();
        //listFiles() :// 返回一个File数组,表示该File目录中的所有的子文件或目录。
        File[] files = file.listFiles();

递归:
遍历文件夹需要用到递归(在当前方法调用自己的现象),可能会出现栈内存溢出异常
优点:代码简洁、清晰,并且容易验证正确性。

 public static void main(String[] args) throws IOException {
        File file=new File("d:/javaee168");
        print(file);
    }
    public static void print(File file){
        //使用递归获取后缀名为.Java的文件
        //判断file对象是否为空
        if (file!=null){
            //判断是否为文件
            if (file.isFile()){
                //是否以.java结尾
                if (file.getName().endsWith(".java")){
                    //是就输出他的绝对路径
                    System.out.println(file.getAbsolutePath());
                }
            }else {
                //这个是目录
                //遍历循环目录里的每个文件再次判断为文件还是目录
                for (File f : file.listFiles()) {
                    if (f.isFile()){
                        if (f.getName().endsWith(".java")){
                            System.out.println(f.getAbsolutePath());
                        }
                    }else {
                        //是目录就重新调用方法执行
                        print(f);
                    }
                }
            }
        }
    }

晚安各位,goodnight;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值