《实战Java高并发程序设计》笔记(二)

第二章、Java并行程序基础

因为这章的内容在我的另一篇博客中戳我一下已经讲解过了,所以这里就不叙述重复的内容,我只把一些我以前理解中不足的地方总结一下。
1、不要使用Thread.stop()方法来终止线程,该方法会直接终止线程,并立即释放这个线程所持有的锁,如果写线程写入数据写到一半被强行终止,那么数据信息就会被破坏。

2、线程中断:
线程中断并不会使线程立即退出,而是给线程发送一个通知,告知目标线程有人需要你退出了,至于目标线程接到通知后如何处理,则有目标线程自行决定。与线程中断有关的三个方法:

  • public void Thread.interrupt():通知目标线程中断,也就是设置中断标志位,中断标志位表示当前线程已经被中断了。
  • public boolean Thread.isInterruped():判断当前线程是否被中断(通过检查中断标志位)
  • public static boolean Thread.interrupted():判断当前线程是否被中断,但同时清楚中断标志位。

注意有些方法会抛出InterruptedException中断异常,也就是说如果我们的程序在运行时被中断,那么程序就执行处理异常的代码,同时清除中断标记。

3、等待和通知:
“等待和通知是发生在同一个对象实例上的”,刚开始我不是很理解这句话,后来我假设对象实例就是一张大床,而线程就是一个个人,我们让A线程在OvjectA对象实例上睡觉(等待),那么我们就必须去ObjectA这张床上叫醒线程A,我们不可能从ObjectB对象实例伤叫醒线程A,这样我感觉好理解多了。
object.notify()方法是随机从等待的线程中唤醒一个,而不是唤醒最早等待的线程。
这里最重要的一点就是waitnotify方法并不是可以随便使用的,这两个方法都必须在获得锁之后才能使用
这里写图片描述
这里也说明一下Object.wait()Thread.sleep()方法的差别,wait方法可以被唤醒,并且wait方法会释放锁。

4、我们可以看到Thread类中有suspend(挂起)和resume(继续执行)这两个方法,注意这两个方法和Thead.stop()方法一样已经被废弃,推荐不要使用,这里稍微讲解一下这两个方法的弊端:
suspend()方法在挂起线程的同时并不释放资源,只有在对应的线程上使用了resume方法后该线程才能继续执行。但是如果在对应线程的suspend方法前使用了resume方法,那么这个线程就会永久挂起。

5、volatile关键字:
我感觉这本书并没有讲清楚volatile关键字的用法,我在网上看到了一片讲解的非常清楚的文章,分享一下:戳我一下

6、线程组:
我们可以通过ThreadGroup tg = new ThreadGroup("线程组名")来创建一个线程组,我们可以通过调用线程组的实例方法来获得活动线程的总数,也可以打印这个线程组中所有线程的信息。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值