栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

线程使用及其问题

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

线程使用及其问题

一、线程安全问题:

• 当多线程并发访问临界资源时,如果破坏原子操作,可能会造成数据不一致。 • 临界资源:共享资源(同一对象),一次仅允许一个线程使用,才可保证其正确性。 • 原子操作:不可分割的多步操作,被视作一个整体,其顺序和步骤不可打乱或缺省。 二、线程同步 (1) • 同步代码块: synchronized(临界资源对象){ //对临界资源对象加锁 //代码(原子操作) } 注:每个对象都有一个互斥锁标记,用来分配给线程的。 只有拥有对象互斥锁标记的线程,才能进入对该对象加锁的同步代码块。 线程退出同步代码块时,会释放相应的互斥锁标记 (2) ·同步方法 synchronized 返回值类型 方法名称(形参列表){ //对当前对象(this)加锁 // 代码(原子操作) } 注: 只有拥有对象互斥锁标记的线程,才能进入该对象加锁的同步方法中。 线程退出同步方法时,会释放相应的互斥锁标记。 三、同步规则 • 注意:         • 只有在调用包含同步代码块的方法,或者同步方法时,才需要对象的锁标记。         • 如调用不包含同步代码块的方法,或普通方法时,则不需要锁标记,可直接调用。 • 已知JDK中线程安全的类:         • StringBuffer         • Vector         • Hashtable         • 以上类中的公开方法,均为synchonized修饰的同步方法。 经典问 四、经典问题 • 死锁:         • 当第一个线程拥有A对象锁标记,并等待B对象锁标记,同时第二个线程拥有B对象锁 标记,并等待A对象锁标记时,产生死锁。         • 一个线程可以同时拥有多个对象的锁标记,当线程阻塞时,不会释放已经拥有的锁标 记,由此可能造成死锁。 • 生产者、消费者:         • 若干个生产者在生产产品,这些产品将提供给若干个消费者去消费,为了使生产者和 消费者能并发执行,在两者之间设置一个能存储多个产品的缓冲区,生产者将生产的 产品放入缓冲区中,消费者从缓冲区中取走产品进行消费,显然生产者和消费者之间 必须保持同步,即不允许消费者到一个空的缓冲区中取产品,也不允许生产者向一个 满的缓冲区中放入产品。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/736920.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号