Java核心技术读书笔记

实现多线程的两种方式,继承Thread类、实现Runnable接口。

不要调用Thread子类或实现Runnable接口的类的run方法,否则只会在当前线程中执行run方法,而不会启动新线程,正确的方法是调用Thread.start方法,这样会启动一个新的线程执行run方法。

线程的四种状态:New(新生)、Runnable(可运行)、Blocked(阻塞)、Dead(死亡)

线程的状态从可运行状态到阻塞状态的条件

1.线程通过调用sleep方法进入睡眠状态

2.线程调用一个在I/O上被阻塞的状态,即该操作在完成读写之前不会返回它的调用者。

3.线程试图得到一个锁,但是这个锁正被其他线程持有。

4.通过调用线程的suspend方法挂起线程。

线程的状态从阻塞状态到可运行状态的条件

1.调用sleep方法时指定的时间已过。

2.正在等待的I/O操作完成

3.线程试图得到的锁已经被其他线程释放

4.调用suspend方法进入阻塞状态的线程上调用了resume方法。

当一个线程状态为阻塞状态时,如果在该线程上调用Interrupt方法会抛出interruptedException。

使用ReentrantLock对象的lock方法为对象加锁,调用其unlock方法释放锁。

等待获得锁的线程和调用Condition.await的线程之间有一个本质的区别,一旦一个线程调用了await方法它就进入了等待该条件集中,当锁获得时不能立刻解除阻塞,他维持阻塞直到另一个线程调用同一个条件上的signalAll方法为止。

使用synchronized关键字修饰的对象(类、方法、代码块)有一个关联条件,调用wait方法把线程加入到等待集中,notify/notifyAll方法解除等待线程的阻塞状态。

将静态方法声明为同步时合法的,如果这个方法被调用它会获得所关联的类对象的锁。例如调用Bank的一个同步静态方法,Bank.class对象的锁就会被锁住。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值