一、概念

1. 维基百科解释
进程是什么?
线程是什么?

2. 一个巧妙的比喻
进程与线程的一个简单解释》 简单摘要如下


计算机概念 类比
CPU 一座工厂
单CPU一次执行一个任务 电力有限,一次只能供给一个车间使用
进程 工厂的车间
线程 车间里面的工人
线程并发 一个车间很多工人
进程的内存是共享的,每个线程都能使用 车间弓箭是工人们共享
一个线程使用内存空间时,其他线程必须等它结束 车间厕所,有人时其他人不能进入
“互斥锁” 厕所上加个锁,进入时锁上
某内存空间,仅供固定数目线程使用 厨房可以同时容纳多个人
“信号量” 挂N把锁,进入的人拿钥匙锁上,出来时放回



二、创建多线程,方法

(1)Runnable接口  (通常选择这种,接口本身可以实现多重继承,比较灵活)
     
1.子类,实现Runnable接口
     
2.子类要覆写Thread类中的run方法
     
3.子类引用对象,Thread t1 = new Thread(d1); 必须声明为Thread类型
     
4.使用start()方法,启动多线程
(2)java.lang.Thread类  (实现了Runnable)
     
1.子类extends Thread
     
2.Thread子类要覆写Thread类中的run方法
     
3.如果要执行一个线程,创建子类的实例化,并且start()方法。使用d1.run()没有使用多线程


三、线程常用方法(不完整,可以自己查阅JDK文档)


类名 方法 功能
Object wait 在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待。(释放对象锁,调用notify继续执行)
Object notify/notifyAll 唤醒在此对象监视器上等待的单个/所有线程。
Thread sleep 在指定的毫秒数内让当前正在执行的线程休眠(不释放对象锁,一段时间后自动执行)
Thread join 等待该线程终止。再恢复当前线程执行 
Thread getPriority / setPriority 取得或设置优先级数值
Thread currentThread 取得当前运行的线程
Thread start 通知线程规划期这个新线程已准备就绪,而且应当在规划的最早方便时间爱你调用他的run()方法。
Thread isAlive 用来测试线程是否启动,即线程是否还未终止。
Thread yield 让出自己的CPU时间片,但是只让出一小会,并不是永远让出不执行

四、线程的生命周期与转换



五、同步

 
1. synchronized()  
在Java语言中,引入了对象互斥锁的概念,保证共享数据操作的完整性。每个对象都对应于一个可成为“互斥锁”的标记,这个标记保证在任一时刻,只能有一个线程访问对象。



2. 锁

synchronized和java.util.concurrent.locks.Lock区别?

相同的是Lock能完成synchronized所实现的所有功能


不同在与是Lock有比synchronized更精确的线程语义和更好的性能。synchronized会自动释放锁,而Lock一定要求程序员手工释放,并且必须在finally从句中释放。



六、竞争者、消费者

资料:
1. Java线程:并发协作-生产者消费者模型

http://lavasoft.blog.51cto.com/62575/221932


2. WIKI 生产者消费者

3. Java多线程-并发协作(生产者消费者模型)

http://www.cnblogs.com/linjiqin/p/3217050.html

4. 架构设计:生产者/消费者模式[0]:概述




七、线程池

为什么要用线程池:

  1. 减少了创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务
  2. 可以根据系统的承受能力,调整线程池中工作线线程的数目,防止因为因为消耗过多的内存,而把服务器累趴下(每个线程需要大约1MB内存,线程开的越多,消耗的内存也就越大,最后死机)

《创建线程池》


聊聊并发(三)——JAVA线程池的分析和使用


Java 线程池学习



八、JDK 线程工具

Executors
Callable/Future
Lock/Condition
Semaphore 信号灯
CyclicBarrier
CountDownLatch
Exhanger
集合





Java 多线程 (并发)总结的更多相关文章

  1. Java多线程-并发容器

    Java多线程-并发容器 在Java1.5之后,通过几个并发容器类来改进同步容器类,同步容器类是通过将容器的状态串行访问,从而实现它们的线程安全的,这样做会消弱了并发性,当多个线程并发的竞争容器锁的时 ...

  2. Java 多线程并发编程一览笔录

    Java 多线程并发编程一览笔录 知识体系图: 1.线程是什么? 线程是进程中独立运行的子任务. 2.创建线程的方式 方式一:将类声明为 Thread 的子类.该子类应重写 Thread 类的 run ...

  3. Java多线程并发技术

    Java多线程并发技术 参考文献: http://blog.csdn.net/aboy123/article/details/38307539 http://blog.csdn.net/ghsau/a ...

  4. java 多线程并发问题总结

    java 多线程并发主要通过关键字synchronized实现 Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码. 一.当两个并发线程访问 ...

  5. 从火箭发场景来学习Java多线程并发闭锁对象

    从火箭发场景来学习Java多线程并发闭锁对象 倒计时器场景 在我们开发过程中,有时候会使用到倒计时计数器.最简单的是:int size = 5; 执行后,size—这种方式来实现.但是在多线程并发的情 ...

  6. Java多线程并发03——在Java中线程是如何调度的

    在前两篇文章中,我们已经了解了关于线程的创建与常用方法等相关知识.接下来就来了解下,当你运行线程时,线程是如何调度的.关注我的公众号「Java面典」了解更多 Java 相关知识点. 多任务系统往往需要 ...

  7. Java多线程并发02——线程的生命周期与常用方法,你都掌握了吗

    在上一章,为大家介绍了线程的一些基础知识,线程的创建与终止.本期将为各位带来线程的生命周期与常用方法.关注我的公众号「Java面典」了解更多 Java 相关知识点. 线程生命周期 一个线程不是被创建了 ...

  8. Java多线程并发05——那么多的锁你都了解了吗

    在多线程或高并发情境中,经常会为了保证数据一致性,而引入锁机制,本文将为各位带来有关锁的基本概念讲解.关注我的公众号「Java面典」了解更多 Java 相关知识点. 根据锁的各种特性,可将锁分为以下几 ...

  9. Java多线程并发04——合理使用线程池

    在此之前,我们已经了解了关于线程的基本知识,今天将为各位带来,线程池这一技术.关注我的公众号「Java面典」了解更多 Java 相关知识点. 为什么使用线程池?线程池做的工作主要是控制运行的线程的数量 ...

  10. Java多线程并发07——锁在Java中的实现

    上一篇文章中,我们已经介绍过了各种锁,让各位对锁有了一定的了解.接下来将为各位介绍锁在Java中的实现.关注我的公众号「Java面典」了解更多 Java 相关知识点. 在 Java 中主要通过使用sy ...

随机推荐

  1. Java 找出四位数的全部吸血鬼数字 基础代码实例

    /**  * 找出四位数的全部吸血鬼数字  * 吸血鬼数字是指位数为偶数的数字,能够由一对数字相乘而得到,而这对数字各包括乘积的一半位数的数字,当中从最初的数字中选取的数字能够随意排序.  * 以两个 ...

  2. [转]PostgreSQL 中文资料汇总

    原文链接:http://francs3.blog.163.com/blog/static/405767272014017341219/ --1 中文社区网站  PostgreSQL 中文社区官网: h ...

  3. IOS SWIFT 网络请求JSON解析 基础一

    前言:移动互联网时代,网络通信已经是手机端必不可少的功能.应用中也必不可少地使用了网络通信,增强客户端与服务器交互.使用NSURLConnection实现HTTP的通信.NSURLConnection ...

  4. Python 文本解析器

    Python 文本解析器 一.课程介绍 本课程讲解一个使用 Python 来解析纯文本生成一个 HTML 页面的小程序. 二.相关技术 Python:一种面向对象.解释型计算机程序设计语言,用它可以做 ...

  5. Oracle10g数据泵EXPDP和IMPDP备份与恢复数据

    Oracle10g数据泵EXPDP和IMPDP备份与恢复数据 一.数据库备份前准备工作 新建备份DIRECTORY目录,并授权给用户 步骤: 1.登录sqlplus 账户名:ptemp 密码:0000 ...

  6. “Clang” CFE Internals Manual---中文版---"Clang"C语言前端内部手册

    原文地址:http://clang.llvm.org/docs/InternalsManual.html 译者:史宁宁(snsn1984) "Clang"C语言前端内部手册 简介 ...

  7. 基于visual Studio2013解决C语言竞赛题之1046矩阵计算

       题目 解决代码及点评 /************************************************************************/ /* 46 ...

  8. NotePad++ 快捷键中文说明

    Ctrl-H 打开Find / Replace 对话框 Ctrl-D 复制当前行 Ctrl-L 删除当前行 Ctrl-T 上下行交换 F3 找下一个 Shift-F3 找上一个 Ctrl-Shift- ...

  9. CSS——float属性备忘笔记

    通过指定CSS属性float的值,从而使元素向左或向右浮动,然后由后继元素向上移动以填补前面元素的浮动而空出的可用空间.CSS的float属性,作用就是改变块元素对象的默认显示方式,HTML标签设置了 ...

  10. JavaWeb图表插件的小研究

    背景 近期的一个项目中,对数据的统计分析有非常大的要求,这就要求有一款非常强大的报表.图表插件.因此,组长给分了任务.让我们各自去研究不同的图表插件.用了一两天的时间,对java这块的图表插件做了一个 ...