一、概念

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. oschina应用工具

    应用工具 22思维导图软件 9博客客户端 15加密/解密/破解 120浏览器 78邮件工具 327文档/文本编辑 31杀毒软件 177终端/远程登录 195IM/聊天/语音工具 74下载工具 64文件 ...

  2. 为centos添加第三方源

    默认centos自带的源少了很多好软件,所以需要添加第三方源一.安装CentOS yum源优先级插件yum-prioritiesyum install yum-plugin-priorities.no ...

  3. Entity Framework基金会

    概要 Entity Framework缩写EF,微软ORM产品. 本篇博客将简单的介绍它,至于它的详细深层次的使用,大家能够查询对应的操作手冊,该篇不过入门. Entity Framework和Lin ...

  4. java高级project师须要掌握的技术

    1.你须要精通面向对象分析与设计(OOA/OOD).涉及模式(GOF,J2EEDP)以及综合模式.你应该十分了解UML,尤其是class,object,interaction以及statediagra ...

  5. Windows多线程

    //简单的引出多线程是肿么回事儿....当点击下载的时候,下载内容还没结束也可以点击资源库,其实这就用了另一个线程,弹出“下载完成”对话框的时候,没有点击确定是不能点击主页面内容的,这就是用----- ...

  6. pthread_detach(pthread_self())

    pthread_detach(pthread_self()) 将状态改为unjoinable状态,确保资源的释放.其实简单的说就是在线程函数头加上 pthread_detach(pthread_sel ...

  7. CSS3_3D效果(IE10_火狐_谷歌)

    好久没写博客了,看了下记录,上次最后写的最后一篇已经是8月1号了,最近有些小东西整理下,当巩固吧 废话少说,直奔本文主题 css3提供了很多新鲜好玩的东西,transform就是其中一个,可以进行 2 ...

  8. 获取客户端IPAsp.Net

    #region 获取客户端IP地址 /// <summary> /// 获取客户端IP地址 /// </summary> /// <returns></ret ...

  9. linux下的软件包安装

    linux下安装软件包有两种方法:源文件编译安装(source)和 rpm 安装. 1.源文件包安装的通用方法. 一般安装源代码的程序你得要看它的README,一般在它的目录下都有的. 01.配置: ...

  10. Bertelsmann Asia Investments, 简称BAI

    聚焦龙宇:贝塔斯曼的中国风险投资之路 _财经_腾讯网 贝塔斯曼亚洲投资基金(Bertelsmann Asia Investments, 简称BAI )