清华主页 - 清华新闻 - 综合时讯 - 正文

Java语言程序设计-17(3)

在这里插入图片描述
在这里插入图片描述

       🌿🌿🌿跟随博主的脚步,从这里开始→#x1f33f主页;🌿🌿

  • 欢迎:这是我学习笔记和总结知识的地方,如果您喜欢,请连续三次,如果有问题,可以发私信🌳🌳🌳
    您的点赞👍、关注➕、收藏⭐️、评论📝、#x1f4e7e7;这是我最大的支持和鼓励!!!🌻🌻🌻

在这里插入图片描述

并发编程基础。

  • 与对象锁同步线程。
    • 线程同步与对象锁。
    • 线程同步与对象锁-方法同步。
    • 线程同步与对象锁-块同步。

线程同步与对象锁-类锁。

  • 线程与对象锁同步。并发执行多线程。能提高程序效率,但是,当多个线程同时访问同一资源时,,这可能是可能的。线程冲突。
  • 的情况。
  • 计数器Counter类对象,它被用作共享数据资源。当两个操作在不同的线程中运行时,同一数据的两个操作可能会发生冲突。原因是有些操作看起来很简单,但。不是原子,
  • (原子操作:￰在执行过程中执行c;不能被线程调度器中断的操作)虚拟机需要多个步骤才能完成。
    表达式:count++;
    1)检索count的当前值。
    2)为检索到的值加1。
  • 3)增加1后的值存储在count中。
    Counter对象༌A和B两个线程。线程A调用increment()方法,同时,线程B还调用increment()法。如果count的初始值为0,它们交错的动作可以按以下顺序执行。
    1)线程A:检索count的值0。
    2)线程B:检索count的值0。
    3)线程A:count加1,count的结果是1。
    4)线程B:count加1,count的结果是1。
    5)线程A:将结果存回count,count的值为1。
  • 6)线程B:将结果存回count,count的值为1。防止多个线程同时访问同一资源发生冲突c;是防止共享对象的方法代码同时执行多个线程。这样的代码在程序中被称为。
  • #xff08临界区;critical section)。为了确保临界区域的代码在一段时间内只执行一个线程,在线程开始执行临界区代码时,,给。临界区加锁󿀌
  • 这样,在这个临界区被解锁之前,其他线程,临界区代码࿰无法执行c;解锁后,其他线程可以锁定和执行代码。每个Java对象都有一个。内在锁。
  • (intrinsic lock),有时也叫监视器锁(monitor lock)。获取对象的内锁是一种独占对象访问权的方式。获取对象的内锁。与。锁定对象。
  • 是一样的。
    Java通过同步代码块实现内锁,Java支持两种同步༚
    1)方法同步。

2)块同步。

  • 线程同步与对象锁法同步。在定义方法时使用方法同步。synchronized。
    在这里插入图片描述
  • 关键字修改󿀌修改方法为同步方法,具体语法格式如下:Synchronized修改的方法在某一时刻只允许一个线程访问。

,访问该方法的其他线程将被阻塞,直到当前线程访问完毕,这种方法只有在其他线程中才有机会执行。

  • 线程同步与对象锁-块同步。
    在这里插入图片描述
  • 如果使用类库中的类别或他人定义的类时,调用方法不使用synchronized关键字修改,要获得对象锁,可使用以下格式:
  • lock是一个锁对象,它是同步代码块的关键。当一个线程执行同步代码块时,,其他线程将无法执行当前同步代码块,会发生堵塞󿀌同步代码块在当前线程执行后,其他线程开始抢夺执行权,获取执行权的线程将进入同步代码块,执行代码。循环往复�直到共享资源得到处理。
  • 这个过程就像一个公共电话亭󿀌只有前一个人打完电话后,后面的人才可以打。
以下代码使用非线程安全的Counter类作为计数器,为了在计数器增加时锁定计数器对象,incrementCount()方法锁定Counter对象。Counter。 counter。=new。Counter。(。)。;public。void。incrementCount。(。)。{ 。x。++;y。++;}。

}。

博主用心写󿀌读者关注#xff00c;互动传真情󿀌知识不迷路。

2025-06-24 12:14:54

相关新闻

清华大学新闻中心版权所有,清华大学新闻网编辑部维护,电子信箱: news@tsinghua.edu.cn
Copyright 2001-2020 news.tsinghua.edu.cn. All rights reserved.