2.21多线程

一.并发编程

java实现并发编程的方式是多线程

其他语言,主打的 并发编程并不一样

Go 主要通过多协程的方式实现并发

erlang 是通过actor模型实现并发

JS 通过定时器和事件回调的方式实现并发

二.多线程

在java标准库,提供了一个Thread类,表示/操作线程

Thread类可以视为Java标准库提供的一组API

创建的Thread实例,其实和操作系统中的线程是一一对应的关系

1.Thread用法

1)创建子类,继承自Thread.并且重写run方法

线程之间是并发执行的实例

这个随机性,会给多线程编程带来其他麻烦

2)创建一个类,实现Runnabale接口,再创建Runnable实例传给Thread实例

3)/4)就是上面两个写法的翻版,使用了匿名内部类

1.

2.

一般认为Runnable的写法更好一些,能够做到线程和线程执行任务更好的解耦

写代码一般要求高内聚,低耦合

5)lambda表达式

2.多线程的用法

1.串型的方法消耗时间再183ms左右

2.多线程方法

这样是错的

此处不能直接记录结束时间,这个求时间戳的代码是在main线程中

main和t1和t2是并发执行的关系,这里t1和t2还没执行完,就开始记录结束时间了,这显然是不准确的

正确做法

让main线程等待t1和t2跑完,再记录结束时间

join()就是等待线程结束

3.多线程的属性

1.名字

2.是否为后台线程

3.是否存活

4..start()

决定了系统是否真的创建了线程

重点(start()和run()的区别)

run()

start()

5.中断线程

让一个线程停下来

线程停下来的关键,是让线程对应的run方法执行完,,

方法1

可以手动设置一个标志位(自己创建的一个boolean变量).来控制线程是否要执行结束

这样就要设置isQuit为私有静态变量

方法2

用Thread内置的一个标志位进行判定

6.线程等待

多个线程之间,调度顺序是不确定的

线程之间的执行是按照调度器来安排的.这个过程可以视为"无序,随机"..

有的时候我们需要,自己控制线程之间的顺序

线程等待就是一种控制线程执行顺序的手段

此处的线程等待,主要是控制线程结束的先后顺序

1.join()

调用join的时侯,哪个线程调用的join,哪个线程就会阻塞等待,等到对应的线程执行完毕为止,也就是对应线程的run()执行完

7.获取线程的引用

Thread.currentThread()能够获取到当前线程的引用.(Thread实例的引用)

哪个线程调用的这个 currentThread,就获取到的是哪个线程的实例~

1.

2.

8.线程休眠

4.总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值