避免死锁的方法:
1、避免一个线程同时获取多个锁
2、避免一个线程在锁内同时占用多个资源,尽量保证每一个锁只占用一个资源。
3、尝试使用定时锁,用lock.tryLock 代替内部的锁机制。
4、对于数据库的锁,加锁和解锁必须在同一个数据库连接里,否则会出现解锁失败的情况。
什么事资源限制:
1、硬盘的读写速度,CPU的处理速度,带宽
资源限制引发的问题:
1、受限于资源限制,多线程情况下,有时候会增加线程上下文切换的开销,导致速度变慢。
如何解决资源限制的问题:
1、单机资源有限,则在多机上运行,搭建集群,通过数据Id % 机器数,计算得到一个机器编码,有对应机器编号的的机器处理这些数据。
2、对于软件限制的话,可以使用资源池将资源复用,
3、在资源限制条件下使用,并发编程,
并发机制的底层实现原理:
1、volatile 的应用
保证了共享变量的可见性,可见性的意思是,当一个线程修改了某个变量的值时,另一个线程能读到这个修改的值。他不会引起上下文切换和调度。
定义:java编程语言允许线程访问共享变量,为了确保共享变量能被准确和一致地更新,线程应该确保通过拍他锁单独获得这个变量。保证可见性,但是不保证一致性。
CPU的术语:
内存屏障 memory barriers 是一组处理器指令,用于实现对内存操作的顺序限制
缓冲行 cache lin