- Java泛型(类型参数化)
- 接口或者类泛型,类型参数放在接口名或者类名后面
- 方法中的泛型参数放在修饰符public/protected/private后
- 多线程
- synchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种:
- 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象;
- 修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象;
- 修改一个静态的方法,其作用的范围是整个静态方法,作用的对象是这个类的所有对象;
- 修改一个类,其作用的范围是synchronized后面括号括起来的部分,作用主的对象是这个类的所有对象。
- wait/notify/notifyAll方法都是Object中的方法,用来控制线程的状态
- wait:如果对象调用了wait方法,会使持有这个对象的线程把该对象的控制权交出去,然后处于等待状态(释放锁)
- notify:如果对象调用了notify方法,会通知正在等待该对象控制权的线程继续运行
- notifyAll:如果对象调用了notifyAll方法,会通知所有等待这个对象控制权的线程继续运行
- sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法
- wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用
- sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常
http://www.mamicode.com/info-detail-517008.html
-
sleep() yield() join()属于线程方法
- sleep() 使当前线程进入阻塞状态,至少在一段时间内无法执行;低优先级的线程也可以执行
- yield() 重新使当前线程进入就绪状态,可能还会立即继续执行;把机会让给同等或高优先级的进程
-
volatile两个作用:
- 线程可见性:一个线程对一个变量的修改立刻由工作内存写回主内存,然后反映到其他线程的读操作中
- 禁止指令重排序优化:由于编译器的优化,程序(尤其是多线程程序)的执行顺序和源代码不同,这在单线程系统中没有问题,一旦引入多线程可能引起严重的问题,volatile可以从语义上解决这个问题。
transiant: 在序列化对象时,transiant修饰的字段不会被序列化(类static变量也不会被序列化)
-
Java线程池
Future提供了三种功能:
1)判断任务是否完成;
2)能够中断任务;
3)能够获取任务执行结果。