4.17日报 P320-P351 同步技术、线程安全问题、线程间通信、线程池、Lambda、File类


学习内容:4.17 P320-P351

解决线程安全问题

  1. 同步代码块 :当多个线程一起抢占CPU时,先抢到的会获取锁对象obj,然后进入代码块,剩余线程需要等第一个线程运行结束归还锁,才能继续获取obj锁对象,在进入代码块
	private int ticket = 100;
	Object obj = new Object();
	@Override
    public void run() {
        synchronized (obj){
            while (tichet>0){
                System.out.println(Thread.currentThread().getName()+"第"+tichet+"票");
                tichet--;
            }
        }
	
  1. 同步方法:此处的锁对象是this也就是new RunnableImpl
	@Override
    public void run() {payTicket();}

	public synchronized void payTicket(){
        while (tichet>0){
            System.out.println(Thread.currentThread().getName()+"第"+tichet+"票");
            tichet--;
        }
    }
  1. 静态同步方法:也可以实现,此处的锁对象是类名.class对象
	public static synchronized void payTicket() {
		//代码块
    }
  1. Lock:先创建一个Lock的子类ReentrantLcck();对象,然后调用lock()开启锁,再多线程安全问题代码后释放锁unlock(),一般写在try,catch,finally中

线程间通信

  1. 线程间通信 :多个线程需要处理同一资源,但处理的任务却不相同
  2. 等待唤醒机制 :
  3. wait进入等待阶段,可以传入毫秒数,等号秒结束自动唤醒
  4. notify 可以唤醒wait阶段的进程
  5. notifyAll 唤醒全部的wait进程
  6. 线程的状态
    在这里插入图片描述

线程池

		//创建一个线程池,里面有3个线程
        ExecutorService es = Executors.newFixedThreadPool(3);
        //执行
        es.submit(new RunnableImpl2());
        es.submit(new RunnableImpl2());
        es.submit(new RunnableImpl2());
        //销毁线程池
        es.shutdown();

Lambda表达式

		//常规书写调用
        incokeCalc(10, 20,
                new Calculator() {
                    @Override
                    public int clac(int a, int b) {
                        return a + b;
                    }
                }
        );

        //lambda简化
        incokeCalc(10,21,(int a,int b)->{
            return a+b;
        });
        //lambda再次简化
        incokeCalc(10,20,(a,b)-> a+b);
  1. 括号中参数列表类型可以省略
  2. 括号中参数只有一个,也可以省略
  3. 如果{}中只有一行,无论是否有return ,都可以省略{} return 分号,省略要一起省略
    在这里插入图片描述

File类

  1. java中用于对文件或文件夹操作的类
  2. File.pathSeparator 路径分隔符windows:分号 linux:冒号
  3. File.separator 文件名称分隔符 windows:反斜杠\ linux:正斜杠/
  4. 绝对路径:电脑中起始文件夹 C:…
  5. 相对路径:相对于项目根目录 a.txt

构造方法

  1. File(String pathname)输入字符串路径,返回File类型的对象
  2. File(String parent,String child)参数1为字符串路径,参数2为文件/文件夹
  3. File(File parent,String child)参数1为File类型,可以使用File的基本方法,参数2为文件/文件夹

常用方法

  1. getAbsolutePath() 返回File对象的绝对路径
  2. getPath() 返回File对象构造方法的路径
  3. getName() 返回File对象的文件/目录名称
  4. length() 返回File对象的文件长度 (文件夹是没有大小概念的,路径为假/为文件夹返回0)
  5. exists() 判断File对象表示的文件/文件夹是否存在
  6. isDirectory() 判断是否为文件夹
  7. isFile() 判断是否为文件
  8. createNewFile() 当前文件夹不存在,则创建一个文件夹
  9. delete()删除此文件/目录
  10. mkdir()创建File表示的目录
  11. mkdirs()创建多级目录
  12. list()返回为字符串数组 ,里面是所有File中的子文件或目录
  13. listFiles()返回一个File数组,里面是所有File中的子文件或目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值