JUC并发编程
2021/10/25 1:39:53
本文主要是介绍JUC并发编程,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
wait/sleep区别
来自不同的类
wait->object
sleep->Thread
wait会释放锁
sleep会抱着锁睡觉
Synchronized和Lock区别
.notifyAll();通知其他线程 .wait();等待 (会释放锁) (if改为while防止虚假唤醒)
package lock; import java.util.concurrent.locks.Lock; public class demo1 { public static void main(String[] args) { Data data=new Data(); new Thread(()->{ for (int i = 0; i <10; i++) { try { data.increment(); } catch (InterruptedException e) { e.printStackTrace(); } } },"A").start(); new Thread(()->{ for (int i = 0; i <10; i++) { try { data.Decrement(); } catch (InterruptedException e) { e.printStackTrace(); } } },"B").start(); new Thread(()->{ for (int i = 0; i <10 ; i++) { try { data.increment(); } catch (InterruptedException e) { e.printStackTrace(); } } },"C").start(); new Thread(()->{ for (int i = 0; i <10 ; i++) { try { data.Decrement(); } catch (InterruptedException e) { e.printStackTrace(); } } },"D").start(); } } class Data{ private int number=0; public synchronized void increment() throws InterruptedException { if (number!=0){//0 this.wait();//等待 } number++;//加1 System.out.println(Thread.currentThread().getName()+"->"+number);//获取当前线程的名字跟数量 this.notifyAll();//通知其他线程加一完毕 } public synchronized void Decrement() throws InterruptedException { if (number==0){ this.wait();//等待 } number--;//减一 System.out.println(Thread.currentThread().getName()+"->"+number);//获取当前线程的名字跟数量 this.notifyAll();//通知其他线程减一完毕 } }
拿两个加法线程A、B来说,比如A先执行,执行时调用了wait方法,那它会等待,此时会释放锁,那么线程B获得锁并且也会执行wait方法,两个加线程一起等待被唤醒。 此时减线程中的某一个线程执行完毕并且唤醒了这俩加线程,那么这俩加线程不会一起执行,其中A获取了锁并且加1,执行完毕之后B再执行。如果是if的话,那么A修改完num后, B不会再去判断num的值,直接会给num+1。如果是while的话,A执行完之后,B还会去判断num的值,因此就不会执行。
这篇关于JUC并发编程的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-07-03微信支付提示下单账户与支付账户不一致-icode9专业技术文章分享
- 2024-07-03微信支付提示订单号重复-icode9专业技术文章分享
- 2024-07-02微服务启动nacos注册上去了,但是一直没有收到请求-icode9专业技术文章分享
- 2024-07-02如何检查文件的编码格式-icode9专业技术文章分享
- 2024-07-02sublime 更改编码格式-icode9专业技术文章分享
- 2024-06-30uniAPP 实现全屏左右滚动滚动的效果-icode9专业技术文章分享
- 2024-06-30如何在本地使用授权或插件-icode9专业技术文章分享
- 2024-06-30伪静态规则配置方法汇总-icode9专业技术文章分享
- 2024-06-29易优CMS安装常见问题汇总-icode9专业技术文章分享
- 2024-06-28易优新手必读安装教程-icode9专业技术文章分享