Java线程同步详解 一、多线程运行问题 1、各个线程是通过竞争CPU时间而获得运行机会的 2、各线程什么时候得到CPU时间,占用多久,是不可预测的 3、一个正在运行着的线程在什么地方被暂停是不确定的 二、线程同步 为了解决上述问题,确保共享对象在同一时间只允许被一个线程访问,即线程同步,可以使用synchronized和lock来实现。 三、synchronized的使用方式 1、修饰一个代码块,被修饰的代码块称为同步代码块,作用范围是大括号{}括起来的代码; 2、修饰一个方法,被修饰的方法称为同步方法,其作用范围是整个方法; 3、修饰一个静态方法,作用范围是整个静态方法;
例程(银行存取款) Class Bank Class DrawAccount 取款 Class SaveAccount 存款 Class Test 测试类 经过测试,当不加入synchronized实现线程同步时,存款取款的账户余额会发生错误, 这里使用线程延时模拟了线程被打断的情况,当存款没完全进行完时打断了此线程进行取款 此时取款后的余额不正确。
当加入了线程同步后,此问题得到了解决。
lock的使用方式 1、synchroized同步的时候,其中一条线程用完会自动释放锁,而Lock需要手动释放,如果不手动释放,可能造成死锁 2、使用synchronized如果其中一个线程不释放锁,那么其他需要锁的线程会一直等待下取,直到使用完释放或者出现异常, 而Lock可以使用响应中断或者使用规定等待时间的锁 3、synchronized无法得知是否到锁,而Lock可以做到 4、用ReadWriteLock可以提高多个线程进行读操作的笑了 lock简单的使用方法
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/36232.html