`

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

阅读更多

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实现多线程并发中的读者与写者问题,能够实现多线程对临界资源的同步有序访问。 具体实现为: 给定一个队列A[1-10][1-100000]、元素编号1-10,其中每个元素包含10万个随机数。创建若干个线程,各循环100次;...

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

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

    concurrent 多线程 教材

    24 实现 Java 多线程并发控制框架.mht 25 多线程、多平台环境中的跟踪.mht 26 使用 ConTest 进行多线程单元测试.mht 27 实现非阻塞套接字的一种简单方法.mht 28 基于事件的NIO多线程服务器.mht 29 驯服 Tiger ...

    java多线程每个线程挨着打印ABC的4种实现方式

    java多线程每个线程挨着打印ABC的4种实现方式,有4个线程t1、t2、t3、t4,t1打印A后t2打印A再t3打印A再t4打印A,然后从新回到t1打印B再t2打印B...t4打印B... 4个线程轮流打印abc... 一个线程可以理解为一个人,打印...

    汪文君高并发编程实战视频资源全集

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

    龙果java并发编程完整视频

    第1节你真的了解并发吗? [免费观看][免费观看] 00:27:48分钟 | 第2节理解多线程与并发的之间的联系与区别 [免费观看] 00:11:59分钟 | 第3节解析多线程与多进程的联系以及上下文切换所导致资源浪费问题 [免费观看]...

    第九讲:分布式锁的原理及应用&秒杀设计实现.pdf

    什么是分布式锁 单机锁(线程锁) synchronized、Lock 分布式锁(多服务共享锁) ...解决的是单进程中的多线程并发问题。 2)分布式锁: 只要的应用场景是在集群模式的多个相同服务,可能会部署在不同机

    java并发编程

    第1节你真的了解并发吗? [免费观看][免费观看] 00:27:48分钟 | 第2节理解多线程与并发的之间的联系与区别 [免费观看] 00:11:59分钟 | 第3节解析多线程与多进程的联系以及上下文切换所导致资源浪费问题 [免费观看]...

    Java高级程序设计-多线程(二).pptx

    3.1.1 模拟银行取款 由于多线程并发问题,一个线程执行余额操作可能未完毕,另外一个线程读取或者也在操作余额,必然会引起数据的不准确性。 这个时候需要在线程中加入对数据的保护机制,从而达到防止并发引起的...

    Java 并发编程原理与实战视频

    第2节理解多线程与并发的之间的联系与区别 [免费观看] 00:11:59分钟 | 第3节解析多线程与多进程的联系以及上下文切换所导致资源浪费问题 [免费观看] 00:13:03分钟 | 第4节学习并发的四个阶段并推荐学习并发的资料 ...

    龙果 java并发编程原理实战

    第2节理解多线程与并发的之间的联系与区别 [免费观看] 00:11:59分钟 | 第3节解析多线程与多进程的联系以及上下文切换所导致资源浪费问题 [免费观看] 00:13:03分钟 | 第4节学习并发的四个阶段并推荐学习并发的资料 ...

    Java程序设计案例教程-第8章-多线程编程.pptx

    第8章 多线程编程 第1页 本章概述 本章的学习目标 主要内容 Java程序设计案例教程-第8章-多线程编程全文共36页,当前为第1页。 本章概述 前面我们所开发的程序大多是单线程的,即一个程序只有一条从头到尾的执行路线...

    C++多线程编程实战

    多线程编程是当今热门的一种编程技术。结合强大的C++,你可以轻松创建各种类型的应用程序、执行并行和优化现有程序。本书是一本实践为主、通俗易懂的C++ Windows多线程编程指导。你将学会如何从多线程方案中受益,...

    Java并发编程实战

    第1章 简介 1.1 并发简史 1.2 线程的优势 1.2.1 发挥多处理器的强大能力 1.2.2 建模的简单性 1.2.3 异步事件的简化处理 1.2.4 响应更灵敏的用户界面 1.3 线程带来的风险 1.3.1 安全性问题 1.3.2 活跃性...

    C#使用读写锁三行代码简单解决多线程并发的问题

    选择最后一种方法实现的时候,若对文件操作与线程同步不熟悉,问题就有可能出现了,因为同一个文件并不允许多个线程同时写入,否则会提示“文件正在由另一进程使用,因此该进程无法访问此文件”。 这是文件的并发...

    java多线程资料

    多线程 思索问题解决 ...Java是第一个在语言的核心中支持线程,通过多线程的并发运行提高了系统资源的利用率,改善了系统性能,但由于多线程要共享内存资源,为了避免数据资源的使用混乱,必须对线程的同步问题作出解

    Java并发:同步容器&并发容器

    第一节 同步容器、并发容器  1.简述同步容器与并发容器  在Java并发编程中,经常听到同步容器、并发容器之说,那什么是同步容器与并发容器呢?同步容器可以简单地理解为通过synchronized来实现同步的容器,比如...

    Java 并发编程实战

    第1章 简介 1.1 并发简史 1.2 线程的优势 1.2.1 发挥多处理器的强大能力 1.2.2 建模的简单性 1.2.3 异步事件的简化处理 1.2.4 响应更灵敏的用户界面 1.3 线程带来的风险 1.3.1 安全性问题 1.3.2 活跃性...

Global site tag (gtag.js) - Google Analytics