java 线程学习-课前须知
2016-03-06 15:11
363 查看
问题一:进程与线程的区别?什么是进程?什么是线程?
进程:程序的执行过程。进程持有资源(共享内存,共享文件)和线程。这里的资源就是内存,程序是要从内存中读取数据来运行的,所以每个程序运行时都会被分配内存。使用进程最常见的例子就是我们可以同时打开LOL和QQ。可以在电脑的资源管理器来查看这两个进程,值得注意的是进程是属于操作系统的。线程:是程序执行流的最小单元。同一个进程中可以有多个线程。线程共享进程的资源。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。比如你在跟别人QQ视频的时候还可以文字聊天。
线程与进程的区别可以归纳为以下4点:
1)地址空间和其它资源(如打开文件):进程间相互独立,同一进程的各线程间共享。某进程内的线程在其它进程不可见。
2)通信:进程间通信IPC,线程间可以直接读写进程数据段(如全局变量)来进行通信——需要进程同步和互斥手段的辅助,以保证数据的一致性。
3)调度和切换:线程上下文切换比进程上下文切换要快得多。
4)在多线程OS中,进程不是一个可执行的实体。
进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其他进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈个局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。
但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。
问题二:线程的生命周期有哪些?
1. 创建状态实例化Thread对象,例如:Thread tt = new Thread() 但没有调用start()方法时的状态
2. 就绪状态
当程序调用start()方法后,此时线程位于就绪状态池中,等待获取CPU的使用权。 线程有资格运行,但调度程序还没有把它选为运行线程时所处的状态。
3. 运行状态
从就绪状态池中被选择为当前执行的线程所处的状态。
4. 阻塞状态
线程依然是活的,但是缺少运行的条件 ,一旦具备了条件,就可以转化为就绪状态(不能直接转为运行状态)。
5. 死亡状态
一个线程的run()方法运行结束,那么该线程完成其使命,他的栈结构将解散,也就是死亡了。但是他任然是一个Thread()对象,任然可以被引用,这一点与其他对象一样,而且被引用的对象也不会被垃圾回收器回收。一旦线程死去,他就永远不能重新启动了,也就是说不能再用start()方法让它运行。
问题三:线程的交互方式是什么?
互斥:比如我所在的实验室就是一个进程,实验室中的每一个同学就是一个线程。实验室有一台打印机(属于进程资源),同学们在使用实验室的公共物品打印机(进程中的共享资源)的时候就会互斥,王同学说:我明天交实训报告,打印机应该我使用。李同学不服:刘老师现在问我要出勤名单,打印机必须我先使用。打印机在使用的时候只能一个一个来,一个同学在使用,那么其他人必须等待。这就是互斥。同步:比如实验室每两周要卫生大扫除,实验室所有同学必须配合起来,齐心合力才能完成大扫除任务。这就是同步。
问题四:线程类Thread常用的方法
线程类Thread和线程接口Runnable都在Java.lang包下面,他们都有一个共同的run()方法。下面是Thread类的常用方法
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树