一、概念

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. 在Eclipse/MyEclipse中安装spket插件

    Spket ide是强大的工具包为了JavaScript和XML的开发,这个强大的编辑器对JavaScript, XUL/XBLand Yahoo! Widget的开发都有全面的支持 ,比如代码完毕, ...

  2. 查看linux下各数据类型的大小

    代码如下: #include<stdio.h> int main() { printf("int:%d bytes\n",sizeof(int)); printf(&q ...

  3. C# 窗体在线2,8,16进制转换以及,在线更新时间

    class Program { static void Main(string[] args) { //十进制转二进制 Console.WriteLine(, )); //十进制转八进制 Consol ...

  4. VMware Workstation下VMnet1等虚拟网卡与主机网卡之间的关系

    VMware Workstation下VMnet1等虚拟网卡与主机网卡之间的关系 本文出自 "王春海的博客" http://wangchunhai.blog.51cto.com/2 ...

  5. c++实现查询天气预报

    原地址:http://blog.csdn.net/x_iya/article/details/8583015 用到的函数.API等 1.中央气象台API返回的JSON数据(http://m.weath ...

  6. Handler.removeMessages的作用,有时候为什么一定要先remove一下呢

    removeMessages会将handler对应message queue里的消息清空,如果带了int参数则是对应的消息清空.队列里面没有消息则handler会不工作,但不表示handler会停止. ...

  7. SQLite数据库框架ORMLite与GreenDao的简单比较

    笔记摘要:最近准备使用数据库做个缓存,以前因为项目中的实时性要求比较高,所以在整体的框架中就没有加缓存,有些地方只 是简单的将对象保存到了Preference中,所以并没有对数据库方面有所研究,既然准 ...

  8. Jquery moblie中的分栏布局

    大家好,很高兴又与大家见面了,今天我要给大家展示的是自己对jquery  moblie中网格布局的理解.可能不是尽善尽美,希望大家多多体谅! 在jquery moblie中有两种布局,一种是表格布局( ...

  9. set global read_only=0; 关闭只读,可以读写 set global read_only=1; 开始只读模式

    mysql> set global read_only=0; Query OK, 0 rows affected (0.00 sec) mysql> show variables like ...

  10. 浅谈初次搭建nginx+php+mysql遇到的问题

    先说明下我linux上的环境: nginx + php(5.5.10) + mysql 開始的源代码已经在本地写好,并调试成功(本地的环境是用XAMPP的默认配置).在把代码上传至linux上时,出现 ...