当前位置: 首页 > 后端技术 > Java

JAVA线程安全

时间:2023-04-01 18:32:28 Java

定义了当多个线程访问一个类时,无论运行环境采用何种调度方式,或者这些线程将如何交替执行,调用代码中不需要任何额外的同步或协调,这个类可以表现出正确的行为,则称此类是线程安全的。上面的定义很简单明了,以后肯定能找到出处。如果非要对上面的定义做一个解释的话,可以是:在多线程环境下,不管调用者有多少个线程,不管调用的顺序或方法是什么,调用者都不需要关心关于它,不需要做任何处理。被调用者可以确保正确的行为。然后,被调用的类是线程安全的。问题的介绍我们先看一个例子,多线程调用后调用的类不能给出预期的正确结果:publicclassAccount{privateintcounter=0;publicvoiddoAddCounter(){for(intj=0;j<100;j++){counter++;}}publicintgetCounter(){返回计数器;}}公共类ThreadDemo实现Runnable{CountDownLatchcountDownLatch;私人账户账户;publicThreadDemo(Accountacct,CountDownLatchcountDownLatch){this.acct=acct;this.countDownLatch=countDownLatch;}@Overridepublicvoidrun(){try{acct.withdrawal(BigDecimal.valueOf(10));acct.doAddCounter();线程.睡眠(15);countDownLatch.countDown();}catch(Exceptione){e.printStackTrace();}finally{}}}publicclassDemoApplication{publicstaticvoidmain(String[]args){账户账户=新账户();intthreadCount=1000;CountDownLatchcountDownLatch=newCountDownLatch(threadCount);System.out.println(countDownLatch);for(inti=0;i