Java学习笔记 day24

1 线程同步机制

在多线程编程 一些敏感数据不允许同时被多个线程访问 我们需要同步访问技术

保证数据在任何同一时刻 最多有一个线程访问 以保证数据的完整性

线程同步 当有一个线程在对内存进行操作时 其他线程都不可以对这个内存地址进行操作

直到该线程完成操作 其他线程才能对该内存地址进行操作

优点

保证多线程并发访问共享资源的安全性。当多个线程同时访问同一份共享资源时,互斥锁可以保证同一时刻只有一个线程能够访问,从而避免了线程间的竞争条件。

提高程序的性能。当多个线程同时访问同一份共享资源时,由于互斥锁的存在,其他线程需要等待当前线程释放锁定才能够访问共享资源,这样可以避免多个线程同时访问共享资源造成的性能问题。

缺点

可能会引起死锁。当多个线程互相持有对方所需要的资源时,就会产生死锁的情况。因此,在使用互斥锁时需要特别注意避免死锁的发生。

可能会引起性能问题。当多个线程同时访问同一份共享资源时,由于互斥锁的存在,其他线程需要等待当前线程释放锁定才能够访问共享资源,这样可能会造成性能问题。

2 互斥锁

java语言中 引入了对象互斥锁的概念 来保证数据操作的完整性

每个对象都对应一个可称为互斥锁的标记 这个标记用来保证在任意时刻 只能有一个线程访问该对象

关键字 syn来与对象互斥锁联系 当某个对象用syn修饰时 表明该对象在任意时刻只能由一个线程访问

  • 线程安全:多个线程同时访问共享数据时,可能会发生数据竞争的问题。为了保证程序的正确性,需要使用同步机制来避免竞争问题。常见的同步机制包括synchronized关键字和Lock接口等。
  • 线程状态:Java线程有不同的状态,包括新建状态、就绪状态、运行状态、阻塞状态和死亡状态。需要了解各种状态之间的转换条件以及如何使用相关的API来管理线程状态。
  • 线程优先级:Java线程可以设置优先级,但是优先级并不是绝对的,仅仅是一个提示。在多个线程同时竞争CPU资源时,操作系统会根据优先级来分配CPU时间片。但是,应该避免过度依赖优先级,因为不同操作系统的实现方式可能不同。
  • 线程组:线程可以被分组,以方便管理和控制。线程组可以使用ThreadGroup类来创建和管理。
  • 线程间通信:多个线程之间需要进行通信时,可以使用wait()、notify()和notifyAll()等方法来进行信号的传递。在使用这些方法时,需要注意加锁和释放锁的顺序,以及如何避免死锁和饥饿等问题。
  • 线程池:线程池是一种管理线程的方式,它可以在应用程序启动时创建一定数量的线程,然后将任务提交给线程池进行处理。使用线程池可以提高应用程序的性能和可伸缩性。
  • 异常处理:Java线程可能会发生异常,需要在代码中进行相应的处理。通常情况下,应该避免在线程的run()方法中抛出异常,而是在捕获异常后进行相应的处理,以保证线程的正常执行。

转自:https://juejin.cn/post/7229353330140954685

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值