package com.leetcode.multithreading.licm;
/**
* @description: aqs
* @author: licm
* @create: 2021-07-26 10:21
**/
/**
* 通过synchronized 实现线程安全
*
* i++是三步操作 所以用volitile不可以
*/
public class NotSafe {
private long count = 0;
public long getCount() {
return count;
}
public void setCount(long count) {
this.count = count;
}
//count进行累加
public synchronized void incCount() {
count++;
}
//线程
private static class Count extends Thread {
private NotSafe simplOper;
public Count(NotSafe simplOper) {
this.simplOper = simplOper;
}
@Override
public void run() {
for (int i = 0; i < 10000; i++) {
simplOper.incCount();
}
}
}
public static void main(String[] args) throws InterruptedException {
NotSafe simplOper = new NotSafe();
//启动两个线程
Count count1 = new Count(simplOper);
Count count2 = new Count(simplOper);
count1.start();
count2.start();
Thread.sleep(50);
System.out.println(simplOper.count);//20000?
}
}
使用sychronized实现线程安全
原创
©著作权归作者所有:来自51CTO博客作者小傻孩丶的原创作品,请联系作者获取转载授权,否则将追究法律责任
不会,我可以学;落后,我可以追赶;跌倒,我可以站起来!
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
容器内查看java 启动参数
目录1、使用 AnnotationConfigApplicationContext 初始化 Spring 容器(1)使用构造函数,简单构造一个容器(2)构造容器时,使用 register(Class…),传入注册类(3)构造容器时,调用 scan(String…) 方法,启用组件扫描(4)构造支持 Web 应用的 AnnotationConfigWebApp
容器内查看java 启动参数 Spring Spring 注解 Spring java 配置 生命周期