**进程与线程详解**

进程与线程详解
一、什么是进程
每一个应用程序 都可以看做是进程 每一个进程享有独立的内存空间和系统资源
二、什么是线程、
线程就是进程中的一条执行路径 同一个进程中的线程共享进程中的资源以及内存空间
多线程会在进程中互抢资源(抢占资源具有不确定性)
多线程的应用:QQ/ 下载
三、如何启动一个线程?
3.1 方式一:继承Thread,调用 start方法 如下:
在这里插入图片描述
在这里插入图片描述
这两个结果 说明了 线程之间争抢资源的不确定性。
3.2 实现Runnable 的方法
在这里插入图片描述
3.3 采用匿名内部类 实现线程对象
说明一下 : 匿名内部类 其实就是接口的多态的应用。
在这里插入图片描述
四、线程的优先级:
4.1 为线程设置优先级
在这里插入图片描述
注意:虽然设置了优先级 但是在多线程中 这样的权限并非绝对的 只是提高了某个权限
更高的线程抢占资源的机会
4.2 线程的休眠
这里采用倒数3 输出随机的人名来实现线程的休眠
在这里插入图片描述
4.3线程的礼让
Thread.yield();
礼让也不是绝对的礼让 而是中断当前线程 继续去和其他的线程抢占其他的资源
在这里插入图片描述
4.4 线程的合并(插队)
插队的线程优先执行完,且是绝对性
当线程Threadm执行到i=10时这时会中断 让线程Threadmm先执行完 在继续执行
class Threadm extends Thread{
Thread mm;

public Threadm(Thread t) {
	// TODO Auto-generated constructor stub
	this.mm=t;
}

@Override
public void run() {
	// TODO Auto-generated method stub
	for(int i=0;i<200;i++){
		System.out.println("子线程"+i);
		if(i==10){
			try {
				mm.join();
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}

}
class Threadmm extends Thread{
@Override
public void run() {
// TODO Auto-generated method stub
for(int i=0;i<200;i++){
System.out.println(“mm子线程”+i);
}
}
}
public class ThreadJoin {
public static void main(String[] args) {

		Thread thre= new Threadmm();
		thre.start();
		Thread thread=new Threadm(thre);
		thread.start();

4.5 线程的中断
方式一: 使用中断状态的方式:
在这里插入图片描述
方式二:设置自定义的开关变量
在这里插入图片描述
五、线程的生命周期
在线程的生命周期中,它要经过新建(New)、就绪(Runnable)、运行(Running)、阻塞(Bolcked)、死亡(Dead)总共5种状态
在线程对象调用start()方法时 线程由新建状态进入到就绪状态 供CPU进行调度
当线程得到资源时 进入运行态 如果在运行状态不满足线程的运行要求或者其他的原因 则会导致线程 阻塞 ,线程运行完成后就被销毁(非线程池);线程池在下一篇文章中会给出介绍。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值