
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
线程是程序员在学习Java编程开发语言的时候需要重点掌握的一个编程知识点,而本文我们就通过案例分析来简单了解一下,Java编程线程应用分析。
线程(Thread),有时候被称为轻量级进程,是程序执行流程的小单元。一个标准的线程由线程ID、当前指令指针(PC)、寄存器集合和堆栈组成。
通常一个进程由一个到多个线程组成,各个线程之间共享程序的内存空间(包括代码段、数据段、堆等)及一些进程级的资源(如打开文件和信号)。
1、为什么需要多线程
某个操作可能会陷入长时间等待,等待的线程会进入睡眠状态,无法继续执行。多线程执行可以有效利用等待的时间。典型的例子是等待网络响应,这时候就可以切换了。
某个操作会消耗大量的时间,如果只有一个线程,程序和用户之间的交互会中断。多线程的情况下,可以让一个线程负责交互,另外一个线程负责计算。
程序逻辑本身就要求并发操作,例如一个多端下载软件。
多CPU或多核计算机,其本身就具备同时执行多个线程的能力。
相对于多进程应用,多线程在数据共享方面效率会高很多。
2、线程的访问权限
线程可以访问进程内存里的所有数据,甚至在知道堆栈地址的情况下,可以访问其他线程里的堆栈信息。其私有存储空间主要分为:栈、线程局部存储(ThreadLocalStorage,TLS)、寄存器(包括PC寄存器)。
线程调度和时间片
在单处理器对应多线程的情况下,并发是一种模拟处理的状态。操作系统会让这些多线程程序轮流执行,每次仅执行一小段时间(通常是几十到几百毫秒),这样子线程就“看起来”在同时执行。
不断在处理器上切换不同的线程行为称之为线程调度(ThreadSchedule),通常拥有至少三种状态,分别是:
运行(Running):此时线程正在执行。
就绪(Ready):此时线程可以立刻运行,但CPU已经被占用,暂时无法分配。
等待(Waiting):此时线程正在等待某一事件(例如:I/O事件)发生,无法执行。
处于运行状态中的线程都会拥有一段可以执行的时间,这段时间段称为时间片(TimeSlice)。其基本流转:
当时间片用尽的时候,进程进入就绪状态。
当时间片用尽之前,进程若开始等待某个事件,那么它将进入等待状态。
每当一个线程离开运行状态时,调度系统就会选择一个当前是就绪状态的线程继续执行。而一个处于等待状态的线程在完成所等待的事件后,就会进入就绪状态。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。