线程中的同步机制问题(三种解决方法) 文章目录 线程同步的基本概念同步机制(以买票为例)第一种 同步代码块1.1、继承Thread类的线程1.2、 实现Runnable的线程1.3、实现Callable接口的线程 第二种 同步方法(还是取票为例)2.1、继承Thread类的线程2.2 、实现Runnable接口的线程2.3、实现Callable接口的线程 第三种 使用Lock(以ReentrantLock)3.1、继承Thread类的线程3.2、实现Runnable接口的线程3.3、实现Callable接口的线程 总结 线程同步的基本概念 线程同步:指的是一个线程发出某一个功能调用时,在没有得到结果之前,该调用不返回。同时其他线程为了保持数据一致性,不能调用该功能。数据胡乱原因: 1)资源共享(独享的资源则不会) 2)调度随机(意味着数据访问会出现竞争) 3)线程间缺乏必要的同步机制 同步机制(以买票为例) synchronized关键字解决的是多个线程之间访问资源的同步性,synchronized关键字可以保证被它修饰的方法或者代码块在任意时刻只能有一个线程执行。另外,在Java早期版本中,synchronized属于重量级锁,效率低下,因为监视器锁是依赖于底层的操作系统的Mutex Lock来实现的,Java的线程是映射到操作系统的原生线程之上的。如果要挂起来或者唤醒一个线程,都需要操作系统帮忙完成,而操作系统实现线程之间的切换时需要从用户态转换到内核态,这个状态之间的转换需要相对较长的时间,时间成本相对比较高,这也是为什么早期的synchronized效率低的原因。庆幸的是在Java6之后官方Java官方对从JVM层对synchronized较大优化,所以现在的synchroniezd锁效率也优化得很不错了。JDK1.6对锁的实现引入了大量的优化,如自旋锁、适应性自旋锁、轻量级锁等技术来减少锁操作的开销。 第一种 同步代码块 使用方法:synchronized(同步监视器){ // 需要被同步的代码 :操作共享数据的代码,即为需要同步的代码。 共享数据:多个线程共同操作的数据 } 1.1、继承Thread类的线程 运行结果: 










2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/22122.html