1. 简化继承父类,创建父类方法,创建子类对象一步完成
2. 格式:
new 父类/接口(){//重写父类/接口的方法}3. 例如:
newThread(){publicvoidrun(){for(int i =0;i<10;i++){sout(i);}}}.start();//或者接口实现类newThread(newRunnable(){publicvoidrun(){for(int i =0;i<10;i++){sout(i);}}}).start();
线程同步机制
1. 同步代码块
a. 格式:
synchronized(锁对象){//可能会出现线程安全的代码块(访问共享资源的代码)}
b. 使用方式:
1. 创建一个锁对象
Object obj =newObject();2. 线程不安全代码放入同步代码块中
synchronized(obj){访问了共享资源的代码块}
c. 注意事项:
1. 通过代码块中的锁对象,可以使用任意对象
2. 但是必须保证多个线程使用的锁对象是同一个
3. 锁对象作用:将同步代码块锁住,只让一个线程在同步代码块中执行
2. 同步方法:
a. 格式:
修饰符 synchronized 返回值类型 方法名(参数列表){//访问共享资源的代码块}
b. 使用步骤:
1. 将访问量共享资源的方法抽取出来放到一个方法中
2. 给该方法添加synchronized修饰符
c. 非static同步方法的锁对象其实就是线程的实现类对象
d.static同步方法的锁对象是本类的class的属性-->class文件对象(反射)3. 锁操作
a. Lock接口实现提供了广泛的锁定操作
b. 常用方法:
voidlock();获取锁
voidunlock();释放锁
c. 使用步骤
1. 在成员位置创建一个ReentrantLock对象
2. 在操作共享资源的代码前使用lock方法获取锁
3. 在操作共享资源的代码结束时使用unlock方法释放锁
d. 与try/catch/finally结合使用
ReentrantLock l =newReentrantLock();
l.lock();try{//操作共享资源代码}catch(Exception e){
e.printStackTrace();}finally{
l.unlock();//将解锁操作放在finall中,无论程序是否异常,都会释放锁}