使用NSURLSession同步获取数据(通过添加信号量)

使用NSURLSession同步获取数据(通过添加信号量),第1张

//创建NSURL对象

NSURL *url = [NSURL URLWithString:@""]] 

//创建请求对象

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@""]]

__block NSData *responseData = nil   

__block NSError *responseError = nil

NSURLSession *session = [NSURLSession sharedSession]

dispatch_semaphore_t semaphore= dispatch_semaphore_create(0)

NSURLSessionDataTask *task = [session dataTaskWithRequest:request

completionHandler:

^(NSData *data, NSURLResponse *response, NSError *error) {

// ...

responseData = data

responseError = error

NSLog(@"-----%@",response)

dispatch_semaphore_signal(semaphore)

}]

[task resume]

dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER)

在类中添加一个成员变量,private int count = 0

在button_click(以你的程序为准)函数中,将count加1。

void button_click()

{

count ++

if(count >= 3)

this.close()//此函数是窗体的关闭函数

Redisson的Github地址: https://github.com/redisson/redisson/wiki/Table-of-Content

基于Redis的Redisson分布式可重入锁RLock对象实现了java.util.concurrent.locks.Lock接口

大家都知道,如果负责储存这个分布式锁的Redisson节点宕机以后,而且这个锁正好处于锁住的状态时,这个锁会出现锁死的状态。为了避免这种情况的发生,Redisson内部提供了一个 监控锁的看门狗 ,它的作用是在Redisson实例被关闭前,不断的延长锁的有效期。默认情况下,看门狗的检查锁的超时时间是30秒钟,也可以通过修改Config.lockWatchdogTimeout来另行指定。

在RedissonLock类的renewExpiration()方法中,会启动一个定时任务每隔30/3=10秒给锁续期。如果业务执行期间,应用挂了,那么不会自动续期,到过期时间之后,锁会自动释放。

另外Redisson还提供了leaseTime的参数来指定加锁的时间。超过这个时间后锁便自动解开了。

如果指定了锁的超时时间,底层直接调用lua脚本,进行占锁。如果超过leaseTime,业务逻辑还没有执行完成,则直接释放锁,所以在指定leaseTime时,要让leaseTime大于业务执行时间。RedissonLock类的tryLockInnerAsync()方法

分布式可重入读写锁允许同时有多个读锁和一个写锁处于加锁状态。在读写锁中,读读共享、读写互斥、写写互斥。

读写锁测试类,当访问write接口时,read接口会被阻塞住。

Redisson的分布式信号量与的用法与java.util.concurrent.Semaphore相似

现在redis中保存semaphore的值为3

然后在TestController中添加测试方法:

当访问acquireSemaphore接口时,redis中的semaphore会减1;访问releaseSemaphore接口时,redis中的semaphore会加1。当redis中的semaphore为0时,继续访问acquireSemaphore接口,会被阻塞,直到访问releaseSemaphore接口,使得semaphore>0,acquireSemaphore才会继续执行。

CountDownLatch作用:某一线程,等待其他线程执行完毕之后,自己再继续执行。

在TestController中添加测试方法,访问close接口时,调用await()方法进入阻塞状态,直到有三次访问release接口时,close接口才会返回。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11349467.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存