上下午切换:
cpu在执行程序的时候,以一个时间片一个时间片切换执行不同的任务,在上一次任务结束需要进行下一个任务的时候,进行上一个任务状态的记忆,然后再加载下一个任务,这样就造成了上下午切换(就像读英文书,遇到一个不会的单词需要去查字典,在查之前我们要记住现在处在第几页的哪个地方,以至于后面能够很快的找他)
解决上下午切换的办法:
。无锁并发编程
。CAS算法
。使用最少线程或者使用协程
1.死锁
避免死锁的办法:
。避免一个线程同时获得多个锁
。避免一个线程在锁内同时获得多个资源,尽量保证一个锁只占有一个资源
。尝试使用定时锁,lock.trylock(timeout)来替换使用内部锁机制《trylocak在获得锁的情况下返回true,在锁被占用的时候立即返回false,trylock(timeout)当加上timeout的时候回在等待time时间后返回false》
。对于数据库锁,加锁,解锁必须在一个数据库连接上,否则就会出现解锁失败的情况
2.资源限制
如何解决硬件/软件的资源限制问题?
。硬件资源限制:使用集群并行执行程序,比如使用hadoop搭建服务集群,不同的机器处理不同的数据,可以通过“数据id%机器数”,计算得到一个机器编号,然后对应编号的机器处理这笔数据。
。软件限制:可以使用资源复用,比如:使用数据库连接池 socket连接池,或者在调用对方webservice时只建立一个连接
java并发中会遇到的小问题
最新推荐文章于 2023-02-06 21:26:46 发布