黑马程序员 关于线程的了解一,黑马程序员
黑马程序员 关于线程的了解一,黑马程序员
----------android培训、java培训、java学习型技术博客、期待与您交流!----------
线程:
在学习毕老师的多线程的视频时,我老是想起计算机原理中的数据相关和操作系统中的进程与线程管理,翻了翻之前的学习笔记,将所学的知识串联了一下。
进程与线程:学习操作系统课程的时候就知道,进程是资源分配的基本单位,也是独立运行的基本单位。而线程是进程内一个相对独立、可调度的执行单元,线程比进程更小,它是程序中相对独立的一个控制流序列。多线程是指一个进程中有多个线程,这些线程共享该进程资源,即数据和文件。如果进程中的一个线程修改了一个数据项,其他线程可以了解和使用此结果数据。一个线程打开并读取一个资源文件时,同一进程中的其他线程也可以同时读取此文件,这又使我不得不联想到操作系统中的信号量同步机构下的那些经典同步问题的知识,同时,计算机组成原理中也有CPU底层数据相关的论述。
并发:就是无因果关联。即若一个系统内部发生的两个事件无因果联系,则称此两个事件是并发的。并行:多个程序在同一时刻同时执行。在物理上必须具备多台处理机。而并发是指多个程序在同一时间段同时执行。
线程:实现了进程内部的并发执行;是进程内部可并发执行的代码段。
并发程序的不确定性:由于进程内部的各个线程共享进程的数据区,对数据区操作顺序不确定,使得数据区中的值不确定。
为什么线程的执行效率比进程的执行效率高?
处理机控制权在进程间切换时线程比进程快,why?因为进程的创建需要创建专有的数据区,而线程不用(线程只是个代码段);进程切换时需要先保存当前进程数据区,然后恢复另一个进程专有数据区。
不确定性实例:
public class Demo {
public static void main(String[] args) throws Exception {
System.out.print("Main开始");
TestThread T1=new TestThread("奇数线程", 1);
TestThread T2=new TestThread("偶数线程", 2);
T1.start(); T2.start();
System.out.print("当前有"+Thread.activeCount()+"个线程");
System.out.print("Main结束");
}
}
class TestThread extends Thread{
private int d;
public TestThread(String name, int d) {
// TODO Auto-generated constructor stub
super(name);
this.d=d;
}
@Override
public void run() {
// TODO Auto-generated method stub
for(int i=d; i<500; i+=2){
System.out.print(" "+i);
}
System.out.print(this.getName()+"结束!");
}
}
语法机制
支持并发的基本语法机制主要集中在:Thread类Runnable接口Object类以及Synchronized修饰。
Thread类封装了:创建 操控 和 管理线程的手段;
Object类提供了线程通信机制;
Runable接口和Synchronized修饰则对线程应用能力进行了拓展。
线程状态和生命周期
线程状态
NEW(新建态):线程对象已经创建但还没有调用start()方法;
RUNNABLE(运行态):调用了start()方法,线程正在运行,或者正在等待处理机时间片;
BLOCKED(阻塞态):正在获取监控锁,等待进入临界资源;
WAITING(等待态):执行wait()或wait(0)之后的状态;
TIME_WAITING(有时间的等待):和WAITING相似,区别在于等待是有时间限制的;
TERMINATED(终止态):线程执行结束。
生命周期
总结:多线程是指一个进程中有多个线程,这些线程共享该进程资源,即数据和文件。
----------android培训、java培训、java学习型技术博客、期待与您交流!----------
相关文章
- 暂无相关文章
用户点评