第二章  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

《实战Java高并发程序设计》读书笔记二的更多相关文章

  1. 深入理解Java虚拟机 -- 读书笔记(1):JVM运行时数据区域

    深入理解Java虚拟机 -- 读书笔记:JVM运行时数据区域 本文转载:http://blog.csdn.net/jubincn/article/details/8607790 本系列为<深入理 ...

  2. 【Todo】深入理解Java虚拟机 读书笔记

    有一个在线系列地址 <深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)> http://book.2cto.com/201306/25426.html 已经下载了这本书(60多M ...

  3. 深入理解Java虚拟机读书笔记5----虚拟机字节码执行引擎

    五 虚拟机字节码执行引擎   1 运行时栈帧结构     ---栈帧是用于支持虚拟机进行方法调用和方法执行的数据结构,是虚拟机运行时数据区中的虚拟机栈的栈元素.     ---栈帧中存储了方法的局部变 ...

  4. 深入理解Java虚拟机--阅读笔记二

    垃圾收集器与内存分配策略 一.判断对象是否已死 1.垃圾收集器在对堆进行回收前,要先判断对象是否已死.而判断的算法有引用计数算法和可达性分析算法: 2.引用计数算法是给对象添加引用计数器,有地方引用就 ...

  5. 深入理解Java虚拟机读书笔记8----Java内存模型与线程

    八 Java内存模型与线程   1 Java内存模型     ---主要目标:定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节.     ---此处的变量和J ...

  6. 深入理解Java虚拟机读书笔记7----晚期(运行期)优化

    七 晚期(运行期)优化 1 即时编译器(JIT编译器)     ---当虚拟机发现某个方法或代码块的运行特别频繁时,就会把这些代码认定为“热点代码”,包括被多次调用的方法和被多次执行的循环体.     ...

  7. 深入理解Java虚拟机读书笔记4----虚拟机类加载机制

    四 虚拟机类加载机制 1 类加载机制     ---概念:虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型.     -- ...

  8. 深入理解Java虚拟机读书笔记3----类文件结构

    三 类文件结构 1 Java虚拟机的两种中立特性     · 平台无关性     · 语言无关性     实现平台无关性和语言无关性的基础是虚拟机和字节码存储格式(Class文件).   2 Clas ...

  9. 深入理解Java虚拟机读书笔记1----Java内存区域与HotSpot虚拟机对象

    一 Java内存区域与HotSpot虚拟机对象 1 Java技术体系.JDK.JRE?     Java技术体系包括:         · Java程序设计语言:         · 各种硬件平台上的 ...

  10. 深入理解java虚拟机读书笔记--java内存区域和管理

    第二章:Java内存区域和内存溢出异常 2.2运行时数据区域 运行时数据区分为方法区,堆,虚拟机栈,本地方法栈,程序计数器 方法区和堆是线程共享的区域 虚拟机栈,本地方法栈,程序计数器是数据隔离的数据 ...

随机推荐

  1. BZOJ1015[JSOI2008]星球大战starwar题解报告

    题目链接 考虑正序去除点去掉其所有连边十分复杂,可以倒序离线处理,每次新建一个点,连接其连边,用并查集统计联通块的个数. 附代码 #include<iostream> #include&l ...

  2. Java初识与配置环境

    Java初识 Java简介 Java是一门面向对象的程序设计语言.功能强大并且简单易用,极好的实现了面向对象理论.允许程序以类似人类的思维方式进行复杂的编程. Java具有简单性.面向对象.分布式.健 ...

  3. Android Socket 通信

    Android socket 通信 安卓编写Socket客户端,实现连接Socket服务端通信. 创建Socket连接并获取服务端数据 先创建几个全局变量吧 private BufferedWrite ...

  4. 关于微信小程序的分包

    最近开始一份新的工作,接手一个正在开发的小程序,第一步添加客服系统,我们用的网易七鱼,利用微信小程序SDK接入的方式,一顿操作之后,欧欧~~!!~~~,提示没法预览, 究其原因,资源包过大,微信小程序 ...

  5. MyBatis知识点整理

    1.MyBatis一般使用步骤 1.1获取Configuration实例或编写配置文件 //获取Configuration实例的样例 TransactionFactory transactionFac ...

  6. Vue - 组件 Prop

    组件注册 全局注册 可在多个vue实例中使用 <div id="app"> <my-component></my-component> < ...

  7. jquery实现登录后右下角弹窗提醒(附带简单样式)

    页面代码如下:   <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://w ...

  8. 在一个C程序中,main()函数可以放在哪?

    C语言规定,在一个C程序中,main()函数的位置(). A.必须在系统调用的库函数之后 B.必须在程序的开始 C.必须在程序的最后 D.可以在任意位置 答案:D [解析] 每个C程序有且只有一个主函 ...

  9. ci/cd部署时遇到的一个问题

    今天在部署项目的时候报了一个错Error  response  from  daemon:  endpoint  with  name  xxx already  exists  in  networ ...

  10. inconsistent use of tabs and spaces in indentation

    这个报错就是混用了tab和4个空格造成的,检查代码,要不全部用tab,要不全部用4个空格,或者用idle编辑器校正