线程安全
讲到线程安全 enn。。。。怎么说呢 这是一个很复杂的东西 --算了直接上代码吧
文章中 有些我也是复制的不过我不像别人看都不看 我都看过一边觉得对的我才会复制
public class SecurityThead {
private static int num=0;
//10个线程,使用线程工具类
private static CountDownLatch countDownLatch = new CountDownLatch(10);
private static void addNum(){
num++;
}
public static void main(String[] args) {
for (int i=0;i<10;i++){
new Thread(()->{
for(int j=0;j<100;j++){
addNum();
try {
Thread.sleep(10L);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
countDownLatch.countDown();
}).start();
}
while(true){
if(countDownLatch.getCount()==0){
System.out.println(num);
break;
}
}
}
CountDownLatch是通过一个计数器来实现的,计数器的初始值为线程的数量。每当一个线程完成了自己的任务后,计数器的值就会减1。当计数器值到达0时,它表示所有的线程已经完成了任务,然后在闭锁上等待的线程就可以恢复执行任务。
输出结果不是1000欸 为什么呢
多个线程执行时,CPU对线程的调度是随机的,我们不知道当前程序被执行到哪步就切换到了下一个线程,所以就会发生线程不安全的情况
有不对的地方欢迎指出来
喜欢的话请点个关注