《Java多线程编程核心技术》

1、线程中断判断:
  • interrupted
public static boolean interrupted()
  • isInterrupted

public boolean isInterrupted()


2、synchronized详解:
(1)加了synchronized的地方会同步阻塞,其他的线程依然可以访问没有加synchronized的地方,可以保证原子性,也可以将线程工作内存的私有变量和公共内中的变量同步
(2)锁对象相同,就同步;不同就不同步;锁对象的属性改变,不影响锁的效果。
(3)锁this的时候,锁的是当前对象。
(4)锁static的时候,锁的是整个.class,这个的范围比较大。
(5)同步不能被继承
(6)出现异常的时候,锁会自动释放
(7)存在父子类继承关系的时候,子类可以通过“可重入锁”调用父类的同步方法

3、volatile详解:
(1)只保证数据的可见性,不能保证数据的原子性;
(2)会强制将公共内存的变量刷新到线程的工作内存当中;

4、全局变量一般存在于公共堆栈和线程的私有堆栈中,如果当JVM被设置为-server模式的时候,为了提高线程的运行效率,线程会一直在私有的堆栈中取值,所有使用volatile来实现变量可见性

5、Condition详解
1、condition.await()方法调用之前要先调用lock.lock()方法来获取到同步监视器
2、创建Condition的对象:
Lock lock = new ReentrantLock();
Condition condition = lock.newCondition();
3、把线程放到指定的组里面就可以唤醒指定的线程
Object类的wait()方法相当于Condition类中的await()方法。
Object类中的wait(long timeout) 方法相当于Condition类中的await(long time,TimeUnit unit)方法。
Object类中的notify()方法相当于Condition中的signal()方法。
Object类中的notifyAll()方法相当于Condition类中的signalAll()方法。

6、Timer详解
(1)(重要!)TimerTask是以队列的方式一个一个被顺序性执行,所以执行的时间有可能和预期的时间不一致,因为前面的任务有可能消耗的时间比较长,则后面的任务的运行时间也被延后。如果是心跳周期执行,线程执行时间较长时候,下一次的心跳执行将会延后!
(2)TimerTask类的cancel()方法是将自己从任务队列中清除;Timer中的cancel()方法的作用是将任务队列中的全部任务清除(Timer的cancel()要注意,要该方法抢到queue锁之后才会结束任务,否则任务会正常执行)。
(3)schedule 和 scheduleAtFixedRate 方法在周期心跳执行的时候,
(3.1)如果任务不延迟,那么下一次任务的执行的开始时间是:上一次任务的开始时间 + period(心跳周期);
(3.2)如果任务延迟了,那么下一次任务的开始执行时间是:上一次任务的结束时间作为参考计算。
(3.4)schedule 和 scheduleAtFixedRate的区别不大,一个小区别是:
schedule 不具有追赶性,比如提前执行的时候,提前时间和当前时间之间的任务不被执行;
scheduleAtFixedRate具有追赶性,比如提前执行的时候,提前时间和当前时间之间的任务会被“补充性”的执行;

7、join详解:
(1)方法join具有使线程排队运行的作用,有点类似同步运行的效果
(2)在join过程中,如果当前线程对象被中断,则当前线程出现异常
(3) 方法join(long)的功能在内部使用的是wait(long)方法来实现,所以join(long)方法具有释放锁的特点。

8、方法wait()锁释放与notify()锁不释放
(1)当wait()方法被执行后,锁自动释放; 但是执行完notify()方法,锁不自动释放,需要执行万notify()所在的synchronized同步代码块后,锁才释放。
(2)wait()方法和notify()方法在调用之前,线程必须获得该对象的对象级别锁。

9、程序调用suspend方法将线程挂起,此方法容易导致死锁,不是建议使用






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值