线程与进程

1.定义一个类 继承Thread 重新run方法
在这里插入图片描述
创建Myhread对象 使用start方法实现 多线程
在这里插入图片描述
2.实现接口Runnable
在这里插入图片描述
在这里插入图片描述
**多线程线路解析 **
在这里插入图片描述
**

多线程技术实现Runnable与继承Thread相比较优势如下

**
1.通过创建任务,然后给线程分配的方式来实现的多线程,更适合多个线程同时执行相同任务的情况
2.可以避免单继承所带的局限性
3.任务与线程本身就是分离的,提高了程序的健壮性
4.后续学习的线程池技术,接受Runnable类型的任务,不接收Thread类型的线程

Thread类的方法
sleep(long millis) 参数毫秒 线程休眠指定毫秒数
sleep(long millis,int nanos) 参数毫秒纳秒 线程休眠指定毫秒数
start() 调用run方法
setDaemon(boolean on) 参数布尔 将线程标记为守护线(当所有的用户线程死亡后他才会死)程或者用户线程

设置和获取线程的名称
使用Thread 中的currentThread方法点击getName获取线程的名字
在这里插入图片描述

**守护线程 **
线程分为守护线程和用户线程
用户线程:单一个进程不包括任何的存活的用户线程时,进程结束
守护线程:守护用户线程,当最后一个用户线程结束时,所有守护线程自动死亡
在这里插入图片描述

**

线程不安全

**
在一些情况出现线程不安全的问题 比如说在卖票的时候 不能卖出多的票
在这里插入图片描述
**解决方案1(同步代码块) **
使用关键字synchronized
在这里插入图片描述
**解决方案2 **
使用同步方法
在这里插入图片描述
**解决方案3 **
线程安全-显示锁lock
同步代码块和同步方法都属于隐式锁
线程同步:Lock
在这里插入图片描述
**

线程的5种状态

**
新建状态(new):当线程对象创建后,即进入了新建状态,如Thread t = new MyThread();
就绪状态(Runnable)当调用线程对象的start()方法(t.start()😉,线程即进入了就绪状态,处于就绪状态的线程
运行状态(Running):当CPU开始调度处理就绪状态的线程时,此时线程才得以真正的执行,即进入到运行状态,就 绪状态是进入到运行状态的唯一入口,也就是说,线程要想进入运行状态执行,首先必须处于就绪状态中
阻塞状态(Blocked)处于运行状态中的线程由于某种原因,暂时放弃对CPU的使用权,停止执行,此时进入阻塞状态,直到其进入到就绪状态,才 有机会再次被CPU调用以进入到运行状态。根据阻塞产生的原因不同,阻塞状态又可以分为三种
1.等待阻塞:运行状态中的线程执行wait()方法,使本线程进入到等待阻塞状态;
2.同步阻塞 – 线程在获取synchronized同步锁失败(因为锁被其它线程所占用),它会进入同步阻塞状态;
3.其他阻塞 – 通过调用线程的sleep()或join()或发出了I/O请求时,线程会进入到阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。
死亡状态(Dead):线程执行完了或者因导致异常退出了run()方法,改线程会结束生命周期
就绪状态转换为运行状态:当此线程得到处理器资源;
运行状态转换为就绪状态:当此线程主动调用yield()方法或在运行过程中失去处理器资源。
运行状态转换为死亡状态:当此线程线程执行体执行完毕或发生了异常

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值