并行程序设计小结

本文详细解析了单线程的实现方式,包括Runnable接口和Callable接口的使用,以及线程的生命周期。深入探讨了线程同步的两种主要方法:加锁和原子操作,并对比了synchronized和lock的不同之处,讲解了读写锁的概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

单线程:

1.实现runnable接口,extends thread ,重写run方法(run方法里面是先执行的方法,需等待后再执行当前线程)。
2.实现callerable接口,重写call方法,public call(){},T是基本类型的包装类,通过list装结果。(带返回值的单线程)。

单线程通过调用static方法来调用,线程过程为:创建->就绪->运行->阻塞->停止

为实现线程同步,两种方法:

1.加锁
2.实现原子操作

三种加锁方式:

1.同步锁 :sycnchronized,可加在方法上,当多个线程访问这个方法时,只有一个线程可进入。
2.同步块:synchronized{},使用this对当前对象加锁,可以进行嵌套,里面还可以加另一个同步锁。
3.可重入锁:(reenTrantLock)可以显式加锁、解锁,功能更多。可判断锁是否被持有。公平策略获得锁
lock.lock()
try{
}finally{
lock unlock()(解锁)
}

读写锁:多个读(并发)一个写(reentrantwritelock/reentrankreadlock),判断当前是读操作还是写操作,读操作加读锁,写操作,加写锁。

wait、notify、notifyall通常和synchronized联用。
1.wait让线程等待某个同步锁,前提是要有同步锁,释放锁 2.sleep也是线程等待,但是不释放线程锁
1.notify唤醒某个正在等待的线程。2.notifyall唤醒所有正在等待的线程,让他们公平竞争,只有一个线程得到该锁。
await、signal、signalall通常和lock联用。

lock和synchronize的区别。

1.synchronized是系统关键字的实现,系统级别实现属于重量级实现,在竞争压力不大的情况下,效率较高。
2.lock属于程序设计的实现,属于应用级别,也就是轻量级实现,在竞争压力大的情况下,效果更佳。
(1)trylock试着锁等一系列新增的线程同步方法。
(2)使用起来更简单不容易出现死锁

生产者和消费者的问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值