线程基本详解

1.线程的基本概念

   什么是线程,线程就是程序中单独顺序的流控制,线程本身不能运行,它只能用于程序中,只能使用分配给程序的资源和环境。

    通常一个进程可以包含若干个线程,它们可以利用进程所拥有的资源。在引入线程的OS中,通常都是把进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位。由于线程比进程小,基本上不拥有系统资源,所以它的调度所付出的开销会小的多,能更高效地提高系统内多个程序之间并发执行的程度。

2.进程与线程的比较

     线程又称轻型进程或者进程元,相应的传统进程又称重型进程,传统进程相当于只有一个线程任务,在有了线程之后,一个进程有一个或者多个线程任务。

     1)进程是资源分配的基本单位,而线程是任务调度和运行的基本单位,在任务调度方面或者线程调度方面不需要设计存储管理方面的操作所以开销更小。

     2)多个进程的内部数据和状态都是完全独立的,而多线程是共享一块内空间和一组系统资源,有可能相互影响。

     3)线程本身的数据通常只有寄存器数据,以及一个程序执行时使用的堆栈,所以线程的切换比进程的切换的负担要小。

 

3.线程的生命周期

  1)新建线程(NEW):通过New关键字创建了Thread类或者子类的对象

  2)就绪状态(RUNNABLE):是创建的线程对象调用了start方法,,这时的线程等待时间片轮转到自己这,以便获得CPU;第二种情况是线程在处于RUNNABLE状态时并没有运行完自己的run方法,时间片用完之后回到RUNNABLE状态,还有种情况就是处于BLOCKED状态的线程结束了当前的BLOCKED状态之后重新回到RUNNABLE状态。

  3)执行状态(RUNNING):这时的线程指的是获得CPU的RUNNABLE线程,RUNNABLE状态是所有线程都希望获得的状态。

  4)DEAD:处于RUNNING状态的线程,在执行完run方法后,就变成了DEAD状态了。

  5)BLOCKED:这种状态指的是处于RUNNING状态的线程,处于某种原因,比如调用了sleep方法或者进行IO操作让出当前CPU给其他线程。

  

 

 

4.单线程的应用

    当程序启动运行时,就自动产生一个线程,主方法main就是在这个主线程上运行。

 

    如图下图所示

    
   可以看到main方法是运行在主线程上面的。我们的程序都是由线程来执行的

 

5.多线程概念

   A.多线程的概念:

   1)一个进程可以包含一个或者多个线程

   2)一个程序实现多个代码同时交替运行,就需要产生多个线程。(比如同一个方法运行在多个线程上,第一个线程可能运行到第3行,而此时第二个线程可能只运行到第1行,第三个线程可能已经运行完了)

   3)CPU随机的抽出时间,让我们的程序一会做这件事情,一会做另外一件事情。

  

   B.多线程的目的

    其实就是最大限度的利用CPU资源,当某一线程的处理不需要占用CPU而只和I/O等资源打交道时,让需要占用CPU资源的其它线程有机会获得CPU资源。

  

6.多线程在Java中基本应用

  同其他编程语言相比,Java内置了多线程的实现方法。表现在程序上有两种实现方式:

  1)继承Thread类,重写run方法

  2)实现Runnable接口,实现run方法

  

  在实践多线程编程之前我们来熟悉以下Thread类和Runnable接口

 

  Thread类:继承了object超类以及实现了Runnable接口。

 API里面的介绍:

    A thread is a thread of execution in a program.The Java Virtual Machine allows an application to have multiple threads of execution running concurrently.

    Every thread has a priority.Threads with higher priority are executed in prefernce to threads with lower priority.Each thread may or may not also be a daemon .When code running in some thread creates a new Thread Object,the new thread has its priority initially set equals to the priority of the creating thread,and is a daemon thread if and only if the creating thread is a daemon.

    主要意思也就是线程是一个运行程序中的控制流。Java虚拟机允许多个线程同时运行。每个线程都有一个优先级,虚拟机会偏向选择优先级高的进程运行,线程可以是一个守护进程也可以不是一个守护线程,如果一个线程是守护线程,那么创建它的线程肯定也是守护线程。

   Runnalbe和Thread雷同。因为Thread实现了Runnalbe接口。

   

 7.多线程的实践

 Thread类

  

  

public class TestThread {

	public static void main(String[] args) {
		Thread1 thread1=new Thread1();
		thread1.start();
	}
	
}

class Thread1 extends Thread {
	@Override
	public void run() {
		for (int i = 0; i < 10; i++) {
			System.out.println("Thread " + i);
		}
	}
	
}
 

 

 

  在System.out.println(“Thread”+i)打印出设置断点,运行程序如下:

 

  

 可以看到现在程序有两个线程,打断点的线程处于挂起状态(Suspend,这个后面会讲到).

 

 

 执行结果:

 

  实现Runnable接口

  

class Thread2 implements Runnable{
	@Override
	public void run() {
		for (int i = 0; i < 10; i++) {
			System.out.println("Thread2 " + i);
		}
	}
}

public static void main(String[] args) {
		Thread1 thread1=new Thread1();
		Thread thread2=new Thread(new Thread2());
		thread1.start();
		thread2.start();
}

 

 在thread2中打断点运行,如下

 

 

   

 可以看到三个线程

 

 

 对于单核CPU来说,某一时刻只能有一个线程在执行(微观串行),从宏观角度来说,多个线程在同时执行(宏观并行)。

对于双核或双核以上的CPU来说,可以真正做到微观并行

 

基于遗传算法的微电网调度(风、光、蓄电池、微型燃气轮机)(Matlab代码实现)内容概要:本文档介绍了基于遗传算法的微电网调度模型,涵盖风能、太阳能、蓄电池和微型燃气轮机等多种能源形式,并通过Matlab代码实现系统优化调度。该模型旨在解决微电网中多能源协调运行的问题,优化能源分配,降低运行成本,提高可再生能源利用率,同时考虑系统稳定性与经济性。文中详细阐述了遗传算法在求解微电网多目标优化问题中的应用,包括编码方式、适应度函数设计、约束处理及算法流程,并提供了完整的仿真代码供复现与学习。此外,文档还列举了大量相关电力系统优化案例,如负荷预测、储能配置、潮流计算等,展示了广泛的应用背景和技术支撑。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的研究生、科研人员及从事微电网、智能电网优化研究的工程技术人员。; 使用场景及目标:①学习遗传算法在微电网调度中的具体实现方法;②掌握多能源系统建模与优化调度的技术路线;③为科研项目、毕业设计或实际工程提供可复用的代码框架与算法参考; 阅读建议:建议结合Matlab代码逐段理解算法实现细节,重点关注目标函数构建与约束条件处理,同时可参考文档中提供的其他优化案例进行拓展学习,以提升综合应用能力。
此项目旨在实现一个简易而实用的RFID智能门禁控制系统。采用经典的51系列单片机——STC89C52作为核心控制器,集成MFRC522射频识别模块来读取RFID卡片信息。用户界面通过128x64像素的LCD显示屏展示相关信息,同时配备了键盘用于密码的输入、验证及修改。此设计结合了RFID技术的高效率识别与单片机的强大控制能力,适用于学习、教学或小型安防项目。 资源包含 源代码:完整C语言编写的源程序,涵盖了RFID识别、密码验证逻辑、显示控制以及用户交互等功能模块。 原理图:详细展示了整个系统的电路连接,包括单片机、MFRC522模块、LCD12864屏幕、按键等组件的电气连接方式,便于理解和自制。 技术特点 RFID技术应用:通过MFRC522模块实现非接触式身份认证,提升门禁安全性与便捷性。 人机交互界面:利用LCD12864显示屏直观展示状态信息,并通过物理按键进行操作,增加了系统的易用性。 密码安全机制:支持用户密码的设定和更改,增强系统安全性。 51单片机编程:适合初学者和专业人士学习51单片机应用开发,尤其是嵌入式系统与物联网领域的实践。 使用指南 环境搭建:确保你有合适的IDE(如Keil uVision)安装以编译51单片机的C代码。 原理图分析:详细阅读原理图,了解各部件间的连接,这对于正确搭建硬件平台至关重要。 编译与上传:将提供的源代码编译无误后,通过编程器或ISP接口烧录到STC89C52单片机中。 硬件组装:根据原理图搭建电路,确保所有组件正确连接。 测试与调试:完成后进行功能测试,可能需要对代码或硬件做适当调整以达到最佳工作状态。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值