背景说明:

多线程并发与管理,是java基础知识里的重点,本文根据《java核心技术第八版》中的多线程技术的学习,对知识点进行整理;这里只对基础知识点进行简单罗列,以达到对知识点有网状关联的效果,能起到提纲挈领的作用,在于其它知识点融合时,有更好的一览效果。

线程概念

1.明确进程与线程的区别

2.不要调用Thread或Runnable对象的run方法,直接调用run方法,只会执行同一个线程中的任务,而不会启动新线程。应该调用Thread.start方法。这个方法将创建一个执行run方法地新线程。

中断线程

1.请求终止线程的方法是interrupt方法

2.在线程阻塞状态下调用interrupt方法时,会产生InterruptException异常。

3.有2个类似方法,interrupted和isInterrupted方法;interrupted是静态方法,它检测当前线程是否中断,并清除该线程的中断状态;isInterrupted是一个实例方法,可用来检验是否线程被终止,不改变线程的中断状态。

线程状态

  1. 新生
  2. Runnable 可运行状态
  3. Blocked 被阻塞
  4. Waiting 等待
  5. Timed waiting 计时等待
  6. Terminated 被终止

重点说明:

Thread的stop,suspend,resume方法已经过时。

Thread.join 方法等待终止指定的线程。注:如果有3个线程,依次分别执行,强调按照顺序执行,主要考察的就是这个方法地使用。

线程属性

属性包括:线程优先级,守护线程,线程组以及处理未捕获异常的处理器

1.优先级

可以设置最小到最大:1到10,norm_priority被定义为5

2.守护线程

作用就是为其它线程服务

同步

常用来举例就是多个线程同时存取钱或者是买火车票。

1.锁对象

从java1.5起,有2种机制可以防止代码受到并发访问的干扰:synchronized ,ReentrantLock.。把解锁操作括在finally子句之内是至关重要的。

2.条件对象

条件对象用来管理哪些已经获得了一个锁但是缺不能有用工作的线程。举例子:如果在多线程转账时,如果账户余额不足,需要等待其他线程转入金额时,就是典型用到条件对象的地方;这里面用到了锁,一个锁可以有一个或多个相关的条件对象。通过条件对象的await方法,当前线程就被阻塞了,并放弃了锁。一个线程调用了await方法,它进入了该条件的等待集,等锁可用时,该线程不能马上解除阻塞,相反它是处于阻塞状态,直到另一个线程调用同一个条件对象的signalAll方法时为止。

3.synchronized关键字

相当于一个内部锁,只有一个条件对象。利用Object的wait,notifyAll,notify;与条件对象里的方法不同:await,signalAll,singal

4.同步阻塞

5.Volatile域

对于域的并发访问是安全的:

  • 域是final,并且在构造器调用完成之后被访问;
  • 对域的访问,由共有锁进行保护
  • 域是Volatile

6.锁测试与超时

因为lock方法是不能被中断的,如果一个线程在等待一个锁时被中断,中断线程在获得锁之前一直处于阻塞状态。如果出现死锁,那么lock方法就无法终止。然而调用带有超时参数的tryLock,那么线程在等待期间被中断,将抛出InterruptedException异常。这是一个非常有用的特性,因为允许程序打破死锁。

7.读写锁

如果很多线程从一个数据结构读取数据而很少线程修改其中数据的话,用ReentrantReadWriteLock类就非常有用。

阻塞队列

对于许多线程问题,可以通过使用一个或多个队列以优雅而安全的方式将其形式化。

ArrayBlockQueue

LinkedBlockQueue

线程安全的集合

ConcurrentHashMap

ConcurrentSkipListMap

ConcurrentSkipListSet

ConcurrentLinkedQueue

在java以前版本中,Vector和HashTable提供了线程安全,在1.2中这些类被弃用,取而代之的是ArrayList和HashMap,这些类不是线程安全的,而集合库中提供了不同的机制,通过使用同步包装器变成线程安全的

Collections.synchronizedList(new ArrayList)

Collections.synchronizedMap(new HashMap)

Callable与Future

FutureTask包装器是一种非常便利的机制,可以将Callable转换为Future和Runnable

Callable<Integer> myComputation = …

FutureTask<Integer> task = new FutureTask<Integer>(myComputation);

Thread t = new Thread(task);//it is a Runnable

t.start();

Integer result = task.get();//it is future

执行器

Executors中有newCachedThreadPool,newFixedThreadPool,newSingleThreadExecutor

还有预定执行,newScheduledThreadPool

同步器

1.倒计时门栓CountDownLatch

一次性的,一旦计数为0,就不能再重用

学习笔记-java 多线程的更多相关文章

  1. 孙鑫VC学习笔记:多线程编程

    孙鑫VC学习笔记:多线程编程 SkySeraph Dec 11st 2010  HQU Email:zgzhaobo@gmail.com    QQ:452728574 Latest Modified ...

  2. [java学习笔记]java语言核心----面向对象之this关键字

    一.this关键字 体现:当成员变量和函数的局部变量重名时,可以使用this关键字来区别:在构造函数中调用其它构造函数 原理:         代表的是当前对象.         this就是所在函数 ...

  3. [java学习笔记]java语言核心----面向对象之构造函数

    1.构造函数概念 特点: 函数名与类名相同 不用定义返回值类型 没有具体的返回值 作用:                给对象进行初始化 注意: 默认构造函数 多个构造函数是以重载出现的 一个类中如果 ...

  4. 大数据学习笔记——Java篇之集合框架(ArrayList)

    Java集合框架学习笔记 1. Java集合框架中各接口或子类的继承以及实现关系图: 2. 数组和集合类的区别整理: 数组: 1. 长度是固定的 2. 既可以存放基本数据类型又可以存放引用数据类型 3 ...

  5. Java学习笔记 -- Java定时调度工具Timer类

    1 关于 (时间宝贵的小姐姐请跳过) 本教程是基于Java定时任务调度工具详解之Timer篇的学习笔记. 什么是定时任务调度 基于给定的时间点,给定的时间间隔或者给定的执行次数自动执行的任务. 在Ja ...

  6. 大数据学习笔记——Java篇之网络编程基础

    Java网络编程学习笔记 1. 网络编程基础知识 1.1 网络分层图 网络分层分为两种模型:OSI模型以及TCP/IP网络模型,前者模型分为7层,是一个理论的,参考的模型:后者为实际应用的模型,具体对 ...

  7. 大数据学习笔记——Java篇之IO

    IO学习笔记整理 1. File类 1.1 File对象的三种创建方式: File对象是一个抽象的概念,只有被创建出来之后,文件或文件夹才会真正存在 注意:File对象想要创建成功,它的目录必须存在! ...

  8. NDK学习笔记-JNI多线程

    前面讲到记录到ffmpeg音视频解码的时候,采用的是在主线程中进行操作,这样是不行的,在学习了POSIX多线程操作以后,就可以实现其在子线程中解码了,也可以实现音视频同步了 简单示例 在native实 ...

  9. [Java学习笔记] Java异常机制(也许是全网最独特视角)

    Java 异常机制(也许是全网最独特视角) 一.Java中的"异常"指什么 什么是异常 一句话简单理解:异常是程序运行中的一些异常或者错误. (纯字面意思) Error类 和 Ex ...

随机推荐

  1. 转: centos系统home下的中文目录改为英文目录

    转自h t t p : / /xugang-1017-126-com.iteye.com/blog/2081845 如果安装了中文版的Cent OS之后,root目录和home目录下会出现中文的路径名 ...

  2. CSS2.1

    学而时习之,不亦说乎!                              --<论语> CSS:cascading style sheet(层叠样式表) 作用:描述页面的样式. 书 ...

  3. BeautifulSoup库应用实例

    获取博客园本人的积分排名数据: 1. 抓包获取积分排名数据返回接口:http://www.cnblogs.com/belle-ls/mvc/blog/sidecolumn.aspx?blogApp=b ...

  4. PIE SDK矢量数据编辑的撤销和回退

    1.功能简介 在数据的编辑过程中难免会出现失误,撤销和回退可以更好的编辑,下面对矢量数据编辑的撤销和回退功能进行介绍. 2.功能实现说明 2.1. 实现思路及原理说明 第一步 调用UndoComman ...

  5. Transform 引起的 z-index "失效"

    重新学习CSS后的第三天,学习制作阴影的过程中,发现的问题:设置了box-shadow后展现的阴影: 添加transform:rotate(10deg);后的效果: 查看CodePen例子:阴影效果 ...

  6. 【计算机网络】SSL交互和握手过程

    SSL消息按如下顺序发送:  1.Client Hello  客户发送服务器信息,包括它所支持的密码组.密码组中有密码算法和钥匙大小: 2.Server Hello  服务器选择客户和服务器都支持的密 ...

  7. 净推荐值(NPS):用户忠诚度测量的基本原理及方法

    文章分享了一个衡量用户与产品或服务之间关系的指标:NPS,干货满满,希望对你有益. 初识NPS 作为互联网行业的用户体验从业者,我们都或多或少会接触一些衡量用户与产品或服务之间关系的指标,常见的指标如 ...

  8. dojo入门

    1.引入dojo.js dojo的发行包里有4个子目录,要引入的文件是名叫"dojo"的子目录里的dojo.js. 假设你是这样的目录结构: project | +--dojo-l ...

  9. 认识dojo

    Dojo是一个强大的面向对象JavaScript框架.主要由三大模块组成:Core.Dijit.DojoX.Core提供Ajax,events,packaging,CSS-based querying ...

  10. [转]ASP.NET Web API系列教程(目录)

    本文转自:http://www.cnblogs.com/r01cn/archive/2012/11/11/2765432.html 注:微软随ASP.NET MVC 4一起还发布了一个框架,叫做ASP ...