当前位置: 首页 > news >正文

做网站 营业执照互联网络推广

做网站 营业执照,互联网络推广,网站改版怎么办,网站开发收费目录 使用单线程使用多线程使用多线程 synchronized使用多线程 原子类AtomicLong 使用单线程 单线程修改计数器的值,没有发生问题,每次运行结果都是10000,不过程序耗时较长 package com.example;/*** 计数器*/ class Counter {private st…

目录

    • 使用单线程
    • 使用多线程
    • 使用多线程 + synchronized
    • 使用多线程 + 原子类AtomicLong

使用单线程

单线程修改计数器的值,没有发生问题,每次运行结果都是10000,不过程序耗时较长

package com.example;/*** 计数器*/
class Counter {private static long count;public static long getCount() {return count;}public static void incrementCount() {count++;}
}public class Demo {public static void main(String[] args) throws InterruptedException {long count = Counter.getCount();System.out.println(count);// 0for (int i = 0; i < 10000; i++) {try {Thread.sleep(1);} catch (InterruptedException e) {e.printStackTrace();}Counter.incrementCount();}count = Counter.getCount();System.out.println(count);// 10000}
}

使用多线程

单线程修改计数器的值,运行速度提高了,不过运行结果每次都不一致,而且结果不是10000

package com.example;import java.util.ArrayList;
import java.util.List;/*** 计数器*/
class Counter {private static long count;public static long getCount() {return count;}public static void incrementCount() {count++;}
}public class Demo {public static void main(String[] args) throws InterruptedException {long count = Counter.getCount();System.out.println(count);// 0List<Thread> list = new ArrayList<>();// 启动10000个线程同时访问计数器for (int i = 0; i < 10000; i++) {Thread thread = new Thread(new Runnable() {@Overridepublic void run() {try {Thread.sleep(1);} catch (InterruptedException e) {e.printStackTrace();}Counter.incrementCount();}});list.add(thread);}for (Thread thread : list) {thread.start();}for (Thread thread : list) {thread.join();}count = Counter.getCount();System.out.println(count);}
}

执行结果

第一次:9910
第二次:9912
第三次:9910

使用多线程 + synchronized

多线程加锁后,最后结果都是10000

package com.example;import java.util.ArrayList;
import java.util.List;/*** 计数器*/
class Counter {private static long count;public static long getCount() {return count;}public static synchronized void incrementCount() {count++;}
}public class Demo {public static void main(String[] args) throws InterruptedException {long count = Counter.getCount();System.out.println(count);// 0List<Thread> list = new ArrayList<>();// 启动10000个线程同时访问计数器for (int i = 0; i < 10000; i++) {Thread thread = new Thread(new Runnable() {@Overridepublic void run() {try {Thread.sleep(1);} catch (InterruptedException e) {e.printStackTrace();}Counter.incrementCount();}});list.add(thread);}for (Thread thread : list) {thread.start();}for (Thread thread : list) {thread.join();}count = Counter.getCount();System.out.println(count);}
}

执行结果

第一次:10000
第二次:10000
第三次:10000

使用多线程 + 原子类AtomicLong

多线程中使用原子类AtomicLong实现计数器,最后结果都是10000

原理是CAS(Compare and Set):

  • 先比较原始值和预期值,如果相等,则修改为新值;
  • 不相等则修改失败

伪代码如下

bool compareAndSet(oldValue, expectValue, updateValue){if(oldValue == expectValue){oldValue = updateValue// update success} else{// update fail}
}
package com.example;import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicLong;/*** 计数器*/
class Counter {private static AtomicLong count = new AtomicLong(0);public static long getCount() {return count.get();}public static void incrementCount() {count.incrementAndGet();}
}public class Demo {public static void main(String[] args) throws InterruptedException {long count = Counter.getCount();System.out.println(count);// 0List<Thread> list = new ArrayList<>();// 启动10000个线程同时访问计数器for (int i = 0; i < 10000; i++) {Thread thread = new Thread(new Runnable() {@Overridepublic void run() {try {Thread.sleep(1);} catch (InterruptedException e) {e.printStackTrace();}Counter.incrementCount();}});list.add(thread);}for (Thread thread : list) {thread.start();}for (Thread thread : list) {thread.join();}count = Counter.getCount();System.out.println(count);}
}

执行结果

第一次:10000
第二次:10000
第三次:10000

参考

  1. 使用Atomic-廖雪峰的官方网站
  2. CAS锁机制(无锁、自旋锁、乐观锁、轻量级锁)
  3. java中的Atomic类
http://www.yayakq.cn/news/127895/

相关文章:

  • 服务器怎样做网站呢网站建设现状
  • 有哪些推广网站四川省建设厅新网站
  • 各大网站推荐静态网站后台
  • 哪个网站能买到做披萨的芝士正宗设计工作室效果图
  • 北京it公司排名国外网站seo免费
  • 广西网站建设开发团队个人网页设计说明书的设计目的
  • 好网站设计公司网站制作过程内容
  • 网站开发技术支持长沙制作公园仿竹围栏厂家电话
  • 济南网站建设群宣传海报用什么软件做
  • 保山市建设厅网站wordpress 开发者模式
  • 珠海网站系统建设项目中英文网站模板下载
  • 怎么做网站后台管理系统长沙网站开发流程
  • 做外贸哪个网站看外汇wordpress首页中不显示文章
  • 某学校网站建设方案论文讯美智能网站建设
  • 安阳网站公司晋江企业网站建设
  • 电商网站页面布局郑州技术支持seo
  • 做电脑系统最好的网站机关网站机制建设情况
  • 优化的含义是什么长沙网站seo优化排名
  • dede手机wap网站模板网页设计案例代码
  • 前几年做啥网站能致富wordpress实例教程
  • 网站快速被收录移动应用开发专业月薪
  • 网站被主流搜索引擎收录的网页数量是多少嘉兴网站建设嘉兴
  • 学院网站建设需求说明书做网站营销公司排名
  • 广东住房建设部官方网站学做网站制作
  • 金华市有网站建设最低价上海网站建设服
  • 开通网站后采购管理软件
  • 中企动力官做网站怎么样wordpress主题搜索图标
  • 用dw制作网站建设商业网站建设实训指导书
  • 最牛餐饮营销手段重庆网站优化排名软件方案
  • 怎么看一个网站用什么平台做的企业网站建设有哪些好处