方法传递
只有值传递
String类中只要有字符串变量的"+",编译器都会将其优化为StringBuilder而后调用append
方法进行字符串拼接,而后调用toString()转为String(内部使用new String)
异常体系
当try catch块中有return语句时,return语句会暂存变量值,然后执行finally代码块。
多线程
1.进程与线程区别
进程:OS中程序的一次执行周期,资源分配的最小单元。
线程:进程中的一个子任务,任务分配的最小单位。
创建与销毁、通信
2.多线程创建方式
继承Thread、实现Runnable、Callable、线程池
3.多线程常用操作方法
3.1 sleep():线程休眠.当前线程立即交出CPU,不会释放对象锁。
运行->阻塞态
3.2 yield():线程让步.交出CPU由系统调度,不会释放对象锁。只会让拥有相同优先级的线程有获取CPU的机会。
运行->就绪态
3.3 join():当前线程等待别的线程执行完毕再恢复执行。会释放对象锁。(对wait的包装)
运行->阻塞态
3.4 interrupt():将线程状态置为中断状态。
a.当线程中有阻塞式(sleep join wait)时,调用interrupt会抛出中断异常。
b.只是将isInterrupted()置为ture。
3.5 wait/notify:线程等待与唤醒,会释放对象锁。
必须在同步代码块与同步方法中使用(synchronized)
守护线程:
生命周期
GC线程
4.多线程同步("管程")
4.1 synchronized对象锁
同步代码块
-锁的是任意对象
-锁的类的反射对象
同步方法
-成员方法:锁当前对象
-静态方法:当前类的反射对象
锁是啥
锁的对象是什么
取钱/存钱
查看密码/修改密码
class Account {
double sal;
String pass;
// 锁sal属性
private Object salLock = new Object();
// 锁pass属性
private Object passLock = new Object();
quSal(){
synchronized(salLock){}
}
cunSal(){
synchronized(salLock){}
}
checkPass(){
synchronized(passLock){}
}
modifyPass(){
synchronized(passLock){}
}
}
类集
JVM