java.io.File
//路径分隔符
//C:\ProgramData + File.pathSeparator + C:\Java
//File.pathSeparator windows:分号 ; linux:冒号:
//文件名称分隔符
//C: + File.separator + ProgramData
//File.separator windows:反斜杠\ linux:正斜杠
反斜杠\ 为特殊字符,需要进行转义 \\
public long length():
文件不存在/文件大小为0,返回0,否则返回文件大小的字节数
路径
绝对路径
相对路径
递归
FileFilter
FilenameFileter
等待唤醒机制
wait
notify
notifyAll
wait 和 notify 必须由同一个锁对象调用
线程池
ExecutorService threadPool = Executors.newFixedThreadPool(threadNum);
threadPool.execute(Runnable r);
threadPool.submit(Runnable r);
threadPool.shutdown();
Lambda
01 () -> {}
new Thread(
() -> { System.out.println("hello Lambda"); }
).start();
//Runnable run 无参数无返回值
02 使用条件:接口类型,只有一个抽象方法
03
@FunctionalInterface
public interface MyFunctionalInterface {
public abstract int sum(int a,int b);
}
public class MyFunctionalInterfaceTest {
public static void main(String[] args) {
int sum = invokeSum(11,22,(a,b) -> (a+b) );
System.out.println(sum);
}
public static int invokeSum(int a1,int b1,MyFunctionalInterface functionalInterface){
return functionalInterface.sum(a1,b1);
}
}
//有参数 有返回值 FunctionalInterface注解:编译器判断接口是否只有一个抽象方法(接口是否为函数式接口)
04
Arrays.sort(arr,(Person p1,Person p2) -> {
return p1.getAge() - p2.getAge();
});
Arrays.sort(arr,(p1,p2) -> (p1.getAge() - p2.getAge()));
a.小括号中的类型可以省略
b.小括号中有且仅有一个参数,小括号可以省略
c.大括号中有且仅有一个语句,无论是否有返回值,都可以省略大括号、return关键字、分号
单例模式
01 懒汉模式 singleton = null
//效率高、存在线程安全问题
02 饿汉模式 singleton = new Singeton()
Callable 实现线程
异常 (异常类创建对象并抛出)
java.lang.Throwable
java.lang.Error
java.lang.Eexception
java.lang.RuntimeException 运行时异常 例如 ArrayIndexOutOfBoundsException
其他类型 编译期异常 例如 IOException
异常的处理
throws
01 如果是运行时异常,默认就会抛出
02 如果是编译期异常,则会抛出
try{ }catch(Exception e){ }
如果代码块可能抛出多个异常,可以:
1 多个 try..catch
2 一个try,多个catch
3 一个try,一个catch 用异常的父类接收
自定义异常 无参构造、有参构造
编译期异常 (extends Exception)
运行期异常 (extends RuntimeException)
子父类方法
父类没有抛出异常
子类可以抛出运行时异常
子类不可以抛出编译器异常(必须 try..catch )
父类抛出异常
子类抛出的异常必须为父类抛出的异常的子类型
线程//并发编程网
并发:一个时间段内发生
并行:一个时间点发生
进程:一个正在运行的程序
线程:进程中的一个执行单元
开启线程的方式一
继承Thread,复写run方法,实例化对象,调用start方法
开启线程的方式二
新建一个类实现Runnable接口,实现run方法,实例化该类 r,new Thread(r).start();
实现 Runnable 接口的好处:
避免单根继承的局限性
增强程序的扩展性,降低程序的耦合性
new Thread(new Runnable(){
public void run(){ System.out.println("r"); }
}){
public void run(){ System.out.println("t"); }
}.start();
//运行结果:t
//Thread 默认的 run 方法 是 调用 Runnable 的 run
//但是被 重写了,所以打印 t
同步
线程安全问题:多线程+共享变量
同步代码块:
synchronized(lockObj){}
// "" this Thread.class
同步方法
修饰符上 加上 synchronized
默认的锁对象
01 非静态同步方法 :this
02 静态同步方法 :类名.class
Lock锁
Lock lock = new ReentrantLock();
lock.lock();
//todoCode
lock.unlock();
推荐写法:
try{
lock.lock();
//todoCode
}【catch(){}】finally{
lock.unlock();
}
线程的状态
NEW 新建状态
RUNNABLE 可运行状态
BLOCKED 锁阻塞状态
WAITING
TIMED_WAITING 即使等待 Thread.sleep(long)/ 锁对象.wait(long)
TREMINATED 终结状态
notify() 将同一个同步中,同一个锁对象下的被等待的线程唤醒
|
|
|
|