Java并发编程之线程(一)
来源:互联网 发布:做淘宝必须有团队 编辑:程序博客网 时间:2024/05/15 13:24
概念
- 线程是一种轻量级的进程。
- 线程优点
- 多个线程拥有共享同一个地址空间和所有可用数据的能力。
- 线程比进程更容易创建和销毁
- 在大量计算和大量 I/O 处理过程中,多个线程能够加快程序执行速度。
- 进程是独立的地址空间:通信比较麻烦。进程之间数据共享没有线程之间方便和高效
每个进程至少有一个线程,可以认为那个线程就是主线程。每个线程都要维护自己的一台寄存器与堆栈。那么什么叫维护自己的一套寄存器呢?物理寄存器只有一套,线程只有在内存中维护自己的一套寄存器。当线程运行时将内存中的值加载到物理寄存器。如果不运行则将寄存器中的值放入内存。通过自己的一套寄存器,避免使用cpu寄存器时产生冲突,将原来的数据覆盖掉,从而导致线程运行出现数据错误。
为什么要用线程?
浏览器
- 线程1显示图像
- 线程2从网络接收数据
文字处理器
- 线程1显示图形
- 线程2读取用户键盘输入
- 线程3自动定时的保存文档
文字处理器案例 进程之间数据共享没有线程之间方便和高效,进程之间合作比较难,线程之间共享数据比较方便
线程的实现:完全在用户层实现
- 把整个线程包放在用户空间中,内核对线程包一无所知。从内核角度考虑,就是单线程进程。
- 优点:不需要上下文切换,不需要对内存高速缓存进行刷新,使得线程调度非常快。允许每个进程有自己定制的调度算法。
- 问题:如何实现阻塞系统调用,使用阻塞调用会阻塞其他的线程。内核由于不知道线程的存在,通常会把整个进程阻塞到 I/O 完成。如果一个线程开始运行,那么该进程中的其他线程就不能运行,除非第一个线程自动放弃CPU。
线程的实现:在内核中实现线程
- 此时不需要运行时系统,内核中有用来记录系统中所有线程的线程表。
当一个线程阻塞时,内核根据其选择,可以运行同一个进程中的另一个线程或者运行另一个进程中的线程。 - 优点:内核很容在线程阻塞时切换到另一个线程执行。内核线程不需要任何新的、非阻塞系统调用。
- 问题:在内核中创建或销毁线程的代价比较大。进程创建问题,一个多线程进程创建新线程出现的问题。当信号到达时,应该有哪一个线程处理。JVM本身就是一个进程,如果用这种方式实现,会导致整个JVM阻塞。例如:当遇到一个IO操作时,整个JVM就会阻塞。使用这种方式时,在操作系统看来只有线程。
线程的实现:平衡折中
- 使用内核线程,然后将用户级线程与某些或者全部内核线程多路复用起来。内核只识别内核线程,并对其进行调度。一些内核线程会被多个用户级线程多路复用。这一模型能够带来最大的灵活度。JVM使用的就是这种模型。
阅读全文
0 0
- Java并发编程之线程(一)
- Java 并发编程之线程池的使用(一)
- java并发编程之线程同步基础(一)
- java并发编程之线程同步辅助类(一)
- java并发编程(一)线程安全性
- java并发编程(一)-线程池
- java并发编程(一)----线程基础知识
- Java并发编程之线程(二)
- java编程思想笔记-并发之线程协作(一)
- java多线程和并发编程(一)--- java 线程小结
- JAVA并发编程(一)JAVA线程池的使用
- Java并发编程之线程管理(线程创建1)
- java并发编程之进程与线程的区别(一)
- java并发编程(一) 线程安全(1)
- Java 并发编程(一)浅谈线程安全
- JAVA 并发编程-线程与进程的由来(一)
- Java并发编程实战笔记(一):线程安全性
- Java并发编程(一)线程定义、状态和属性
- Android系统中的进程管理:内存的回收
- [Unity&GameSparks]注册玩家信息分类无法添加
- 模拟摄像机和网络监控摄像机画面嵌入网页直播
- Codeforces514
- Java模板方法设计模式
- Java并发编程之线程(一)
- GPS和RTK的基本知识
- java 基础知识总结
- android sqlite CRUD 查询 事务
- Qt编译mysql驱动
- 无源汇有上下界可行流(网络流进阶)
- java 类、接口基础知识
- android AsyncTask 源码解读
- DNS、NAT、ARP&RARP