java多线程(四)之同步机制

Wesley13
• 阅读 492

1.同步的前提

  多个线程

  多个线程使用的是同一个锁

2.同步的好处

  同步的出现解决了多线程的安全问题

3.同步的弊端

  当线程较多时, 因为每个线程都会去判断同步上的锁, 这样是很耗费资源的, 会降低程序的运行效率.

4.同步方法:

  1.就是将同步关键字, synchronized加到方法上, 此时的锁对象是this

  2.静态方法的锁对象是类的字节码文件对象, Xxx.class

5.jdk5之后的Lock锁

  Lock接口的两个方法

    lock(): 获取锁

    unlock(): 释放锁

  子类:ReentrantLock()

    通过调用子类的这两个方法, 获取锁, 释放锁, 将需要同步的代码块包进来, 同样可以解决线程安全问题.如下伪代码:

    ReentrantLock lock= new ReentrantLock();

try{

lock.lock();

同步代码;

}finally{

lock.unlock();

}

6.同步弊端

  a.效率低

  b.如果出现同步嵌套, 容易产生死锁

    死锁: 两个或两个以上线程, 在争夺资源的过程中, 出现相互等待的现象.

7.线程间通信

  不同种类的线程针对同一个资源的操作.(生产者, 消费者)

  生产者, 消费者, 等待唤醒机制:

  java多线程(四)之同步机制

点赞
收藏
评论区
推荐文章
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
执键写春秋 执键写春秋
3年前
Java多线程同步示例(三个售票窗口同时出售20张票)
分析:1.票数要使用同一个静态值;2.为保证不会出现卖出同一个票数,要java多线程同步锁。3.有一个线程卖这张票时,其他线程要等这张票卖完!packageperson.xsc.practice;publicclassSaleWindowimplementsRunnableprivateintticket20;@Ov
Easter79 Easter79
3年前
synchronized 和 ReentrantLock的区别
synchronized是Java内建的同步机制,所以也有人称其为IntrinsicLocking,它提供了互斥的语义和可见性,当一个线程已经获取当前锁时,其他试图获取的线程只能等待或者阻塞在那里。在Java5以前,synchronized是仅有的同步手段,在代码中,synchronized可以用来修饰方法,也可以使用在特定的代码块
简
3年前
数组越界导致系统重启的案例
一.问题描述引言一般数组越界问题,往往是涉及多线程并发的情况下,某个或多个临界资源(比如类或对象的成员变量)多线程并发读写而导致的异常。出现这样情况,一般是该保护的地方没有用同步锁保护,或者是用错了同步锁,这类问题比较常规。但本文要分享的案例却是一个方法内的临界资源已被加锁保护的情况下仍然出现的数组越界问题,导致system\server挂掉,手
Wesley13 Wesley13
3年前
java多线程的常见例子
一.相关知识:Java多线程程序设计到的知识:(一)对同一个数量进行操作(二)对同一个对象进行操作(三)回调方法使用(四)线程同步,死锁问题(五)线程通信 等等二.示例一:三个售票窗口同时出售20张票;程序分析:1.票数要使用同一个静态值 2.为保证不会出现卖出同一个票数,要java多线程同步锁。设计思路:1.创建
小万哥 小万哥
1年前
C++多线程编程和同步机制:详解和实例演示
C中的多线程编程和同步机制使得程序员可以利用计算机的多核心来提高程序的运行效率和性能。本文将介绍多线程编程和同步机制的基本概念和使用方法。多线程编程基础在C中,使用库来创建和管理线程。线程可以通过函数、成员函数或者Lambda表达式来实现。以下是一
Wesley13 Wesley13
3年前
Java线程知识深入解析(2)
多线程程序对于多线程的好处这就不多说了。但是,它同样也带来了某些新的麻烦。只要在设计程序时特别小心留意,克服这些麻烦并不算太困难。(1)同步线程许多线程在执行中必须考虑与其他线程之间共享数据或协调执行状态。这就需要同步机制。在Java中每个对象都有一把锁与之对应。但Java不提供单独的lock和unlock操作。它由高层的结构隐
Wesley13 Wesley13
3年前
Java 之 synchronized 详解
一、概念synchronized是Java中的关键字,是利用锁的机制来实现同步的。锁机制有如下两种特性:互斥性:即在同一时间只允许一个线程持有某个对象锁,通过这种特性来实现多线程中的协调机制,这样在同一时间只有一个线程对需同步的代码块(复合操作)进行访问。互斥性我们也往往称为操作的原子性。可见性:必须确
Wesley13 Wesley13
3年前
Java多线程synchronized关键字引出的多种锁
前言Java中的 synchronized关键字可以在多线程环境下用来作为线程安全的同步锁。本文不讨论 synchronized 的具体使用,而是研究下synchronized底层的锁机制,以及这些锁分别的优缺点。一、synchronized机制synchro
Wesley13 Wesley13
3年前
Java多线程锁释放
Java多线程运行环境中,在哪些情况下会使对象锁释放?由于等待一个锁的线程只有在获得这把锁之后,才能恢复运行,所以让持有锁的线程在不再需要锁的时候及时释放锁是很重要的。在以下情况下,持有锁的线程会释放锁:(1)执行完同步代码块,就会释放锁。(synchronized)(2)在执行同步代码块的过程中,遇到异常而导致线程终止,锁也会被释放。(exc