hpe实训课(多线程1)

1.程序:

程序是存储在磁盘上,包含可执行机器指令和数据的静态实体(静态的代码)

2.进程:

是系统进行资源分配和调度的基本单位

3.线程:

是进程的一条执行路径,一个进程至少有一个线程,进程中的多个线程共享进程的资源

4.多线程:
 * 在单个程序中同时运行多个线程完成不同的工作,称为多线程
 * 	  ①.用户向服务发起一个请求,服务器收到请求并作出响应结果就是一个多线程
 *    ②.客户端N多的请求同时去请求服务器,这是多线程。
 *    ③.线程的两种调度方式:抢占式调度和非抢占式调度(一般情况下都会使用抢占式)
5.进程和线程的区别:
 * 	①.一个程序至少有一个进程,一个进程至少有一个线程
 * 	②.线程的划分尺度小于进程,使得多线程程序的并发性高。
 * 	③.进程在执行过程中拥有独立的内存单元,而多个线程共享内存,提高了程序的运行效率。
*   ④.每个独立的线程都有一个程序的入口,但是线程不能够独立运行,必须依赖于进程
6.并行和并发
 * 	 并发:①.一个处理器同时处理多个任务(一个人同时去吃三个馒头)
 * 	 	  ②.通过cpu算法调度,让用户看上去是同时进行,实际上不是真正的同时,并发强调在一个时间段同时执行
 * 			而一个时间段是有多个单位时间组成,所以说并发的多个任务在单位时间内不一定在同时进行
 *   并行:①.多个处理器同时处理多个不同的任务(三个人同时吃一个馒头)
 *   	  ②.多个处理器或者多台机器同时执行一段处理逻辑,是真正的同时
7.为什么要使用线程:
 * 	①.提升cpu的计算能力,避免资源浪费
 *  ②.提高系统的响应速度(如果系统只有一个线程可以执行,那么当用户发出不同的请求时,由于上一个请求没有处理完成,必然在队列中等待)
8.共享资源
 * 	 ①.允许被不同的线程访问的资源
 * 	 ②.共享资源时多线程允许不止一个线程访问的类变量或者实例变量。
9.锁:

当多个线程共同使用同一个共享资源的时候,会出现资源争抢,锁就是来解决这种冲突保证线程有序使用共享资源。

10.线程安全
 * 	①.如果一段代码可以保证多个线程访问的时候正确操作共享资源,那么就是线程安全	的。
 *  ②.一个资源只可以被多个线程调用的情况,不会出现冲突就是线程安全的。     
 *  ③.出现线程不安全的唯一因素:就是多个线程同时修改共享资源
11.线程分类
*  线程可以分为用户线程和守护线程
*  ①.守护线程(daemon thread):是指在后台运行的贤臣个,用于提供后台服	务。
*  ②.用户线程(user thread): java创建的线程默认是用户线程
* 		-- 两者的区别:
* 		①.当进程中还有用户线程在运行时,进程不终止。
* 		②.当进程中只有守护线程运行时,进程终止
12.线程的生命周期
 * 	当线程被创建启动之后,不是启动立刻进入执行状态,也不是一直处于执行状态,它要经历如下几个步骤:
 * 	新建(New) -- 就绪(Runnable) -- 运行(Running) -- 阻塞(Blocked) -- 死亡(Dead)
 *      ①.新建状态:当程序创建好一个线程后,该线程就处于新建状态,此时JVM为其分配内存。
 * 	    ②.就绪状态:当线程对象调用start()方法后,该线程就处于就绪状态,等待cpu调度运行
 * 		③.运行状态:已经开始执行run()方法的线程执行体,该线程处于运行状态,cpu已经调度执行
 * 		④.阻塞状态:当运行状态的线程失去所占资源后,就进入阻塞状态
 * 			-- 当线程调用sleep()方法时主动放弃CPU资源
 * 			-- 线程想要获取同步监视器的时候,此监视器正被其他线程所持有。
 * 			-- 线程在等待某个通知(notify)
 * 		⑤.死亡状态:线程在run()方法执行结束进入死亡状态。此外如果线程执行了interrupt(),(stop 已弃用)那么也会进入死亡状态。
 * 				     那么也会计入死亡状态
13.线程的通信
 * 		①.wait():令当前线程挂起并放弃cpu的控制权,使别的线程可以访问并修改共享资源。(等待)
 * 		②.notify():唤醒正在排队等待同步资源的线程。(单个线程)
 * 		③.notifyAll():唤醒正在排队等候资源的所有线程。(所有线程) 	
 *      -- 注意问题:
 * 			①.以上三个线程通信方法都不属于Thread类,是属于Object类,每个对象都拥有以上三个方法
 * 			    因为每个对象都有锁,锁是每个对象的基础
 * 			②.当需要调用以上方法的时候,一定要对共享资源进行加锁,如果不加锁,则会引发IllegalMonitorStatteException异常	
 * 			③.当想要调用wait()方法进行线程等待的时候,必须要取得这个锁对象的控制权(对象监视器),一般是放到synchronized(obj)代码块中
 * 			④.调用wait()方法是释放了对象的锁,否则其他线程是无法获得锁
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值