smallFishBug 发表于 2017-6-24 16:31:48

Java多线程09

本帖最后由 smallFishBug 于 2017-6-24 16:32 编辑

wait方法属于Object类的方法

join方法具有使线程排队运行的作用,
join与synchronized的区别是:
join在内部使用wait()方法等待,synchronized使用的是“对象监视器”原理为同步

方法join(long)与sleep(long)的区别
join(long)方法具有释放锁的特点
Sleep(long)方法不释放锁的特点

类ThreadLocal的使用
变量值的共享可以使用public static变量的形式
如果实现每个线程都有自己的共享变量,就用 ThreadLocal类
类ThreadLocal主要解决的就是每个线程绑定自己的值,可以将ThreadLocal类比喻成全局存放数据的盒子,盒子中可以储存每个线程的私有数据
1、使线程变量具有隔离性

ThreadLocal<T>T指 泛型类
方法:

Protected T initialValue()返回此线程局部变量的当前线程的“初始值”通常为null线程第一次使用get()方法时访问变量时将调用此方法,但是如果线程值钱调用了set()方法,则不会再调用initialValue方法,通常每个线程最多调用一次,但是调用remove()后,线程可再次调用initialValue()

Get()返回线程局部变量的当前线程的值如果变量没有当前的值,则先调用initialValue()方法返回的值

Set(T value)将此线程局部变量的当前副本中的值设置为指定值

Remove()移除此线程局部变量当前线程的值

类InheritableThreadLocal的使用
作用:可以在子线程中取得父线程继承下来的值
方法:
Protected childValue(T parentValue)
在启动子线程之前,从父线程内部自动调用此方法   可重写
可在子线程返回parentValue父值, 重写的话,可以有其他行为

ReentrantLock类
接口 lock
所有已知实现类:
ReentratLockConditionreadwriteLock
方法:
newCondition()返回绑定到此Lock实例的新Condition实例
Lock lock= new ReentrantLock()      lock.lock()锁住    lock.unlock()释放对象
Lock是锁住后面部分代码,并非对象,有多个被lock方法,线程A调用method1(),线程B可以调用method2(),互不影响

Condition接口
Void await()   此condition实例的锁以原子方式释放 造成当前线程在接到信号或被中断之前一直处于等待状态
在condition.await()方法调用之前要调用lock.lock()代码获得同步监视器
相当于对lock实例进行筛选,打上印记,利用自身的await(),signalAll(),signal()等方法对lock实例进行操作
当condition的await()被调用时,释放当前线程占用的锁
会释放,其他线程执行Condition.signal(),之前的线程会重新获得锁,继续执行
页: [1]
查看完整版本: Java多线程09