鱼C论坛

 找回密码
 立即注册
查看: 2688|回复: 0

[学习笔记] Java多线程09

[复制链接]
发表于 2017-6-24 16:31:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 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
所有已知实现类:
ReentratLock  Condition  readwriteLock
方法:
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鱼币 +5 收起 理由
小甲鱼 + 5 支持楼主!

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-26 12:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表