`

多线程并发第一讲:线程同步

阅读更多

1 什么是线程安全

线程安全:当多个线程访问同一个类(对象或方法)时,如果这个对象始终能表现出正确的行为,那么认为这个类(对象或方法)是线程安全的。

 

2 synchronized 关键字解释

synchronized:可以在任意对象及方法上加锁,而加锁的这段代码称为 “临界区”或“互斥区”。

synchronized取得的锁都是对象锁,而不是把一段代码当锁。所以代码中哪个线程先执行synchronized的方法,哪个线程就持有该方法所属对象的锁。

 

在静态方法上加synchronized关键字,表示锁.class类,类一级别的锁。

 

3 对象锁的同步和异步

有两个线程T1,T2 。    T1先持有对象O的锁。

1) T2可以异步调用O对象的非synchronized修饰的方法。

2) 如果这个时候T2调用O对象synchronized修饰的方法,则需等待,也就是同步。

 

4 脏读

业务整体需要使用完整的synchronized,保持业务的原子性。

 

5 死锁

在设计程序时应该避免双方相互持有对方的锁的情况

线程T1,T2  

在T1的同步代码块里,同步调用T2的同步代码块

在线程T2的同步代码块里,同步调用T1的代码块

伪代码

synchronized  (m1) {

       synchronized (m2){

       }

}

synchronized  (m2){

    synchronized (m1){

       }

}

 

6 代码块加锁

1) 使用sychronized代码块加锁,比较灵活。

2) 可以减小锁的粒度,提高性能

 

0
0
分享到:
评论

相关推荐

    java多线程并发

    ### Java多线程并发知识点详解 ...综上所述,Java中的多线程并发机制非常强大,不仅提供了基本的同步手段,还有丰富的工具类帮助开发者更加高效地管理和调度线程,极大地提高了程序的并发性能和资源利用率。

    C#多线程开发之并发编程经典实例.zip

    在C#编程中,多线程是一个至关重要的概念,尤其对于开发高性能、高并发的应用程序而言。本资源“C#多线程开发之并发编程经典实例”提供了丰富的实例,旨在帮助C#开发者深入理解并掌握多线程技术。以下是关于C#多线程...

    多线程并发代码的IntelliJ IDEA中调试方法.docx

    ### 多线程并发代码的IntelliJ IDEA中调试方法 #### 一、代码解析 在探讨如何使用IntelliJ IDEA进行多线程代码调试之前,先了解代码本身的功能。 **1.1 代码功能** 代码的主要目的是计算两个非常大的数字的阶乘...

    C#(Csharp)多线程HTTP并发请求(HttpWebRequest)采集蜘蛛

    在C#编程中,开发网络爬虫或者进行批量HTTP请求时,多线程并发请求能够显著提高效率。本文档主要介绍如何使用C#的HttpWebRequest类实现多线程并发HTTP请求,以创建高效的采集蜘蛛程序。 首先,网络爬虫的工作流程...

    多线程并发

    在IT领域,多线程并发是程序设计中的一个重要概念,特别是在C++这样的系统级编程语言中。多线程允许一个程序同时执行多个不同的任务,从而提高应用程序的性能和响应速度。这种技术尤其适用于处理大量I/O操作、进行...

    多线程并发同步(爸爸妈妈苹果橘子问题,有界面)

    总之,多线程并发同步是一个复杂但实用的编程技术,通过这个“爸爸妈妈苹果橘子问题”的例子,我们能深入理解并发控制的重要性,以及如何在VC++环境中使用线程同步对象来实现它。这个案例不仅有助于学习者提升编程...

    mtc_多线程并发拷贝程序.zip_linux_research965_showacj_多线程并发_拷贝

    在实际应用中,多线程并发拷贝程序可能需要考虑的问题包括但不限于线程同步、资源分配、错误处理以及性能优化。例如,为了保证数据一致性,拷贝过程中可能需要使用互斥锁(`std::mutex`)来防止多个线程同时访问同一...

    c#多线程编程实战(原书第二版)源码

    《C#多线程编程实战(原书第二版)源码》是一本深入探讨C#中多线程技术的专业书籍,其源码提供了丰富的实践示例,帮助读者掌握并发编程的核心概念和技术。在C#中,多线程是实现高性能、响应式应用程序的关键组成部分...

    创建多线程线程同步

    本主题将深入探讨如何在编程中创建多线程以及如何实现线程同步,特别关注CEVENT对象在Windows API中的应用。 **一、多线程的基本概念** 多线程是指在一个进程中可以同时运行多个独立的执行流,每个执行流被称为一...

    多线程单例模式并发访问

    ### 多线程单例模式并发访问 #### 一、多线程基础概念 在讨论多线程单例模式及并发访问之前,我们先来了解一些基本概念。 **进程**和**线程**是计算机科学中的两个核心概念,它们之间的关系紧密而复杂。 - **进程...

    多线程并发查找.docx

    在Java编程中,多线程并发查找是一种优化大型数据处理的有效方法。在这个示例中,我们看到一个程序设计用于在10000个由Math类的random()函数生成的随机整数组成的数组中,查找用户输入的目标值x的所有下标。这个任务...

    多线程操作串口示例(带modbus

    多线程意味着一个程序内可以同时运行多个线程,这样就可以并发处理不同的任务,提高程序的响应速度和资源利用率。在处理串口通信时,可能需要同时监听来自不同设备的数据,或者同时发送命令到多个设备,此时多线程的...

    c++多线程同步——信号量

    在C++编程中,多线程同步是一种关键的技术,它允许多个执行线程协同工作,以避免数据竞争和死锁等并发问题。信号量(Semaphore)是实现多线程同步的一种有效工具,常用于控制对共享资源的访问。在这个名为"Mthread11...

    C#多线程读写sqlite

    当多线程环境对SQLite进行读写操作时,可能会引发数据竞争和并发问题,因此必须采取适当的同步策略来确保数据的一致性和完整性。 标题"**C#多线程读写sqlite**"涉及的主要知识点包括: 1. **多线程编程**:C#中的`...

    汪文君高并发编程实战视频资源下载.txt

    │ 高并发编程第一阶段05讲、采用多线程方式模拟银行排队叫号.mp4 │ 高并发编程第一阶段06讲、用Runnable接口将线程的逻辑执行单元从控制中抽取出来.mp4 │ 高并发编程第一阶段07讲、策略模式在Thread和Runnable...

    JAVA高质量并发详解,多线程并发深入讲解

    - **第1章:Java并发基础组件** 介绍`java.util.concurrent`包中的关键组件,如`ExecutorService`、`ScheduledExecutorService`、`Future`等,并阐述它们在并发编程中的作用。 - **第2章:Synchronized关键字详解*...

    c语言多进程多线程编程

    在计算机科学中,多进程和多线程是两种并发执行的方式,它们允许程序在同一时间处理多个任务,从而提高系统的效率和响应性。C语言作为一门底层且强大的编程语言,提供了丰富的系统调用接口来实现多进程和多线程编程...

    易语言调用大漠插件多线程例程

    多线程是并发处理的一种方式,能够提高程序的执行效率,特别是在需要同时进行多个任务时。 大漠插件是一系列用于辅助编程的工具集,通常包含多种功能,如屏幕抓取、图像识别、键盘鼠标模拟等,常用于自动化测试、...

    第一节(多线程通讯代码演示及解决线程安全问题)

    通过学习和理解上述知识点,并结合具体的代码演示(如第一节(多线程通讯代码演示及解决线程安全问题).mp4视频),开发者可以更有效地应对多线程编程中的挑战,编写出高效、稳定的多线程应用程序。

Global site tag (gtag.js) - Google Analytics