《实战Java高并发程序设计》读书笔记二

第二章  Java并行程序基础

1、线程的基本操作

  • 线程:进程是线程的容器,线程是轻量级进程,是程序执行的最小单位,使用多线程而不用多进程去进行并发程序设计是因为线程间的切换和调度的成本远远的小于进程。
  • 新建线程:通过new关键字创建一个线程对象,此时线程处于NEW状态,等到线程start()方法被调用时,会让这个线程的run方法执行,线程执行时处于RUNNABLE状态,表示线程所需一切资源都准备好了。
  • 终止线程:使用stop()方法可以将线程终止,已被废弃可能引起数据不一致性,不推荐使用。
  • 线程中断:intertupt()中断线程,isInterrupted()判断线程是否被中断,interrupted()判断是否被中断并清除当前中断标志。
  • 等待和通知:wait()方法被调用以后,当前线程在这个对象上等待,notify()方法调用会从等待队列中随机唤醒一个线程,这两个方法都属于object类,这两个方法的使用必须包含在synchronized语句中,都得先获得对象监视器。
  • wait()方法和sleep()方法的区别:wait方法可以被唤起,sleep不能。wait方法会释放目标对象的锁,sleep方法不释放任何资源。
  • 挂起和继续执行:suspend挂起方法使线程暂停的同时不会释放任何资源,直到resume操作被挂起的线程才能继续,这两个方法已经被废弃不推荐使用。
  • 等待线程结束:join()阻塞在当前线程,直到目标线程执行完毕。
  • 谦让:yield()方法使线程让出CPU可以给其他线程一些机会,自己参与下一次竞争中。

2、volatile与Java内存模型

  • volatile:告诉虚拟机这个变量极有可能被修改,确保一个线程修改数据后,其他线程也可以看到改动。

3、线程组

  • 线程组:如果线程数量很多可以将具有相同功能的线程放在同一个线程组中。可以使用Thread的构造函数,指定线程所属的线程组ThreadGroup,将线程和线程组关联起来。
  • activeCount():获取活动线程的总数是一个估计值。
  • list():显示线程组的详细信息。

4、守护线程

  • 当一个Java应用内装有守护线程时Java虚拟机将自动退出。
  • 垃圾回收和JIT都可以理解为守护线程

5、线程安全与synchronized

  • synchronized的作用:实现线程间的同步,它的工作是对同步代码块加锁,使每一次只有一个线程进入同步代码块,从而保证线程的安全性。
  • 指定加锁对象:对给定的对象加锁,进入同步代码之前要获得给定对象的锁
  • 直接作用于实例对象:相当于对当前实例加锁,在进入同步代码块前要获得当前实例的锁。
  • 直接作用于静态方法:相当于对当前类加锁,在进入同步代码块之前要获得当前类的锁。

转载请于明显处标明出处

https://www.cnblogs.com/AmyZheng/p/10437083.html

posted @ 2019-02-26 16:38  AmyZheng  阅读(306)  评论(0编辑  收藏  举报