【多线程】

一、线程创建方式一lll

在这里插入图片描述0l’l’l

在这里插入图片描述

在这里插入图片描述

1、注意事项
1、start方法,否则相当于单线程:

在这里插入图片描述

2、主线程任务在后

在这里插入图片描述

1、方式二:实现Runnable接口

在这里插入图片描述

任务对象----------->线程对象

在这里插入图片描述

2、方式二:匿名内部类创建子线程

在这里插入图片描述
在这里插入图片描述

以上方法不足之处

在这里插入图片描述

3、方式三:callable接口,futureTask实现(run()可以返回结果)

在这里插入图片描述
callable任务:实现callable接口、重写call方法
可以获取线程执行结果!!!
在这里插入图片描述

call()方法返回结果是string,因此用string接

在这里插入图片描述

二、Thread方法

1、常用:getName、currentThread、sleep、join

在这里插入图片描述

在这里插入图片描述

2、setName()

在这里插入图片描述

3、线程按顺序执行:join

在这里插入图片描述

三、线程安全

在这里插入图片描述

案例:同时取钱

将一个账户对象交给两个线程处理:
在这里插入图片描述

代码:

在这里插入图片描述
DrawAccount类并没有name属性,只能调用父类Thread的super()为线程setName

思路:

1、重写run方法、封装操作类Account
2、DrawAccount类中想调用操作类方法就必须要有成员变量acc
3、Account类中想操作就必须有成员变量money
4、线程start方法想执行run方法就必须传参acc才能调用run中的操作类

1、同步代码块:synchronized

账户取钱(对比小明小红送礼物)

在这里插入图片描述

在这里插入图片描述

synchronized(this):this代表Account类中的账户对象,而Account对象只new了一次(由acc、acc1对象调用的drawMoney方法),线程的start方法自动调用run()方法,被锁住只能一个一个访问!!
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2、同步方法

在这里插入图片描述

在这里插入图片描述

3、lock锁

在这里插入图片描述

在这里插入图片描述

4、线程通信

在这里插入图片描述

四、==线程池

1、线程池概念

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、ThreadPoolExecutors创建线程池对象

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3、 线程池方法:execute、submit的区别

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
线程复用并获取返回结果
线程复用并获取返回结果

4、拒绝任务

在这里插入图片描述

在这里插入图片描述

5、Executors创建线程池对象

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

五、并发、并行、生命周期

1、并发、并行

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、生命周期

在这里插入图片描述
在这里插入图片描述

六、乐观锁、悲观锁

在这里插入图片描述

1、悲观锁

synchronized(this):this代表MyRunnable对象,而MyRunnable对象只new了一次,多个线程访问该对象的时,线程的start方法自动调用run()方法,被锁住只能一个一个调用!!
在这里插入图片描述

2、乐观锁

原理
在这里插入图片描述
在这里插入图片描述
源码
在这里插入图片描述

3、案例:小明小红送礼物(对比账户取钱)

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值