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

广州市企业网站建设平台产品市场推广计划书

广州市企业网站建设平台,产品市场推广计划书,免费解析网站,网页制作学习教程文章目录 1. 线程同步与共享资源保护概述1.1 多线程安全问题1.2 解决方案:线程同步 2. 线程同步的常用方式2.1 使用 synchronized 关键字2.2 使用 ReentrantLock 3. 实践:多线程计数器示例4. 实践说明与运行步骤5. 总结与思考6.今日生词 1. 线程同步与共…

文章目录

  • 1. 线程同步与共享资源保护概述
    • 1.1 多线程安全问题
    • 1.2 解决方案:线程同步
  • 2. 线程同步的常用方式
    • 2.1 使用 synchronized 关键字
    • 2.2 使用 ReentrantLock
  • 3. 实践:多线程计数器示例
  • 4. 实践说明与运行步骤
  • 5. 总结与思考
  • 6.今日生词

1. 线程同步与共享资源保护概述

1.1 多线程安全问题

  • 数据竞争(Race Condition) :当多个线程同时访问共享变量且至少有一个线程进行写操作时,就可能发生数据竞争,导致最终结果不正确。
  • 共享资源问题: 例如多个线程同时对同一个计数器进行自增操作,如果没有同步保护,可能会出现丢失更新,计数结果最终不正确。

1.2 解决方案:线程同步

通过引入同步措施(例如 synchronized 关键字或Lock接口实现)可以确保在同一时刻只有一个线程访问共享资源,从而保证数据一致性。

2. 线程同步的常用方式

2.1 使用 synchronized 关键字

  • 原理:synchronized 利用对象的内部锁(Monitor)来确保同步,只有获得锁的线程才能进入临界区。

  • 用法:

    • 同步方法:在方法声明上添加 synchronized。
    • 同步代码块:在代码块前使用 synchronized(锁对象){ … },锁对象通常使用 this 或其他共享对象。
  • 优点:语法简单,适合大部分场景。

  • 缺点:颗粒度较粗,灵活性不如 Lock。

2.2 使用 ReentrantLock

  • 原理:ReentrantLock 提供了与 synchronized 相同的互斥保护,同时支持更多高级功能,例如公平锁、可中断锁申请等。
  • 用法:
    • 通过 lock() 获取锁,在 finally 块中确保调用 unlock() 释放锁。
  • 优点:可中断锁,尝试锁(tryLock)等高级特性。
  • 缺点:需要手动释放锁,代码稍显繁琐。

3. 实践:多线程计数器示例

我们通过一个简单示例来比较两种同步方式在多线程计数器实现中的使用。

示例一:使用 synchronized 关键字
创建一个使用 synchronized 保护自增操作的计数器,确保在多个线程中并发更新时结果正确。

// SynchronizedCounter.javapublic class SynchronizedCounter {private int count = 0; // 共享计数器// synchronized方法保证同一时刻只有一个线程进入public synchronized void increment() {count++;}public int getCount() {return count;}public static void main(String[] args) throws InterruptedException {SynchronizedCounter counter = new SynchronizedCounter();int numThreads = 10;        // 启动10个线程int incrementsPerThread = 1000; // 每个线程计数1000次Thread[] threads = new Thread[numThreads];// 创建并启动线程for (int i = 0; i < numThreads; i++) {threads[i] = new Thread(() -> {for (int j = 0; j < incrementsPerThread; j++) {counter.increment();}}, "Thread-" + i);threads[i].start();}// 等待所有线程执行完毕for (Thread t : threads) {t.join();}// 最终计数应为:10 * 1000 = 10000System.out.println("Final count (synchronized): " + counter.getCount());}
}

示例二:使用 ReentrantLock
使用 ReentrantLock 来保护临界区,实现同样的多线程计数器。

// ReentrantLockCounter.javaimport java.util.concurrent.locks.ReentrantLock;public class ReentrantLockCounter {private int count = 0; // 共享计数器private final ReentrantLock lock = new ReentrantLock(); // 创建锁对象public void increment() {lock.lock(); // 获取锁try {count++;} finally {lock.unlock(); // 确保释放锁}}public int getCount() {return count;}public static void main(String[] args) throws InterruptedException {ReentrantLockCounter counter = new ReentrantLockCounter();int numThreads = 10;        // 启动10个线程int incrementsPerThread = 1000; // 每个线程计数1000次Thread[] threads = new Thread[numThreads];// 创建并启动线程for (int i = 0; i < numThreads; i++) {threads[i] = new Thread(() -> {for (int j = 0; j < incrementsPerThread; j++) {counter.increment();}}, "Thread-" + i);threads[i].start();}// 等待所有线程执行完毕for (Thread t : threads) {t.join();}// 最终计数应为:10 * 1000 = 10000System.out.println("Final count (ReentrantLock): " + counter.getCount());}
}

4. 实践说明与运行步骤

1.新建项目:

  • 在 IntelliJ IDEA 中创建一个新的 Java 项目,命名(如:ThreadSyncDemo)。
    2.创建类文件:
  • src 下分别创建两个 Java 文件(例如:SynchronizedCounter.java ReentrantLockCounter.java),粘贴上述各自代码。
    3.编译运行:
  • 右键点击任一文件的main方法所在的编辑器窗口,选择 Run ‘SynchronizedCounter.main()’ 或 Run ‘ReentrantLockCounter.main()’。
  • 观察控制台输出,验证最终计数是否为预期的 10000。

5. 总结与思考

  • 线程安全问题:多个线程并发修改共享变量时,若无同步保护,可能会引发数据竞争,导致数据不准确。

  • synchronized 与 ReentrantLock 的选择:

    • synchronized:简单易用,但锁机制较为简单,无法中断等待线程。
    • ReentrantLock:更为灵活,支持公平性设置、中断锁定等高级功能,但使用时要注意确保在 finally 块中释放锁,避免死锁风险。
  • 实践意义:

    • 理解和掌握基本的线程同步机制,是编写正确的多线程程序的基础。
    • 可根据应用场景选择合适的同步策略,以保证程序在并发环境下数据的一致性与正确性。

6.今日生词

1.resident 2.pose 3.compound 4.consumption 5.facility

http://www.dtcms.com/wzjs/73174.html

相关文章:

  • 专做婚礼logo的网站长沙百度快速排名
  • 凡科微传单制作官网seo排名赚app是真的吗
  • 政协网站建设功能微信软文范例大全100
  • 网站没后台怎么修改类容seo网站推广是什么意思
  • 汕尾北京网站建设武汉百度推广seo
  • 全球做的比较好的网站天津天狮网络营销课程
  • 龙华哪有做网站设计上海seo优化服务公司
  • 环保推广哪个网站好有没有免费的推广网站
  • 什么网站做的好郑州网站排名优化外包
  • 一流的网站建设seo技术分享免费咨询
  • 网站系统的运营和维护网络营销方案范文
  • 百度分享wordpress插件seo助力网站转化率提升
  • 兖州中材建设有限公司网站南京seo优化培训
  • 做设计及免费素材网站有哪些广东队对阵广州队
  • wordpress qq登陆南京seo按天计费
  • 网页设计与制作解答题整站优化系统厂家
  • wordpress 星星评分seo标签怎么优化
  • 复制代码做网站四川全网推网络推广
  • 做营销网站建设网络推广人员是干什么的
  • 网站建设教育bing搜索引擎下载
  • 家装博览会seo和sem的关系
  • seo网站怎么搭建qq群推广网站免费
  • 竞价单页系统温州网站建设优化
  • 本机怎么放自己做的网站东莞seo外包平台
  • 汽车行业网站建设维护服务名词解释搜索引擎优化
  • 英文网站的首页怎么做武汉seo招聘信息
  • 房子网站有哪些关键词优化报价查询
  • 鄂尔多斯网站建设深圳平台推广
  • 外贸网站建设公司 迅当网在哪里可以发布自己的广告
  • 手机视频网站建站企业新闻稿发布平台