一.reflection
详见C:\Users\HW91139\workspace\JavaTask\src\Reflection\TestReflect.java
二.代理
静态代理:
耦合度太高,调用类每次都必须包含被调用类作为成员变量来调用被调用类的方法。
动态代理:
Jdk只能代理接口。代理的类,里面有很多私有方法,但真正提供服务的只有少数,使用接口则可以屏蔽掉不用的那些,大大简化。
三.Spring
IOC:反射
AOP:面向切面编程
四、多线程
1.继承Thread类public class Demo extends Thread{
@Override
public void run(){
System.out.println("Hello World");
}
}
2.实现Runnable接口
public class Demo implements Runnable{
@Overide
public void runn(){
System.out.println("Hello World");
}
}
一般采用第二种方法,因为java中是单继承的。
public static void main(String[] args){
Thread thread = new Thread(new Demo());
thread.start();
}
线程有同步问题,尽量避免全局变量,如果用了那么加锁:
public class Demo32 implements Runnable{
private int counter;
@Override
public void run(){
synchronized(this){
counter++;
System.out.println(Thread.currentThread().getName() + ": current counter is " + counter);
}
}
public static void main(String[] args){
Demo32 demo = new Demo32();
new Thread(demo).start();
new Thread(demo).start();
new Thread(demo).start();
}
}
上方法不建议使用,毕竟使用多线程是为了提高效率用的。
当不一样的实例时,则锁基本不生效。除非锁换成类锁(类名.class)
线程间通信:
当单线程读文件,多线程写入,如何保证内存能很好使用?使用arrayBlockingQueuePrivate volatile int value中volatile对这个变量每次申请取值时都要更新到最新。
备注:本系列仅用于个人笔记所以写的很不完善,请多多包涵~