java高级day07

目录

多线程同步

synchronized(同步锁)

synchronized同步块

同步方法—非静态方法

同步方法—静态方法

死锁

生产者消费者

Lock锁

ReentrantLoc类

Condition类

线程池

介绍:

优点:

创建方式:

Q&A

多线程同步
synchronized(同步锁)

介绍:

  • synchronized的作用是保证在同一时刻, 被修饰的代码块或方法只会有一个线程执行,以达到保证并发安全的效果。

  • synchronized是Java中解决并发问题的一种最常用的方法,也是最简单的一种方法。

使用方式:

  • 修饰代码块:指定加锁对象,对给定对象加锁

  • 修饰实例方法:作用于当前实例加锁

  • 修饰静态方法:作用于当前类加锁

synchronized同步块

使用格式:

synchronized(对象){//代码块的内容  同一时刻只能一个线程进来 对象只要保证是唯一的就可以  
//需要同步的代码
}

注意:一般把变量被修改的部分放在代码块中

同步方法—非静态方法
  • synchronized加在非静态方法表示同步对象锁:同一时刻只运行一个线程的对象访问该同步方法,其他线程等待当前线程执行完毕交还锁才能访问该同步方法

  • 给非静态方法加上synchronized修饰,在Thread中调用被修饰过的方法

  • 必须是同一个对象调用才能发挥作用,如果定义两个对象,各自调用方法则不能同步

同步方法—静态方法
  • 类名.被synchronized修饰的方法

  • 如果创建了对象,也可以通过对象调用,但实际还是通过类来调用,即使创建了两个对象来调用依然可以实现同步

死锁

当两个线程(或更多)线程(或线程)相互持有对方所需要的资源,又不主动释放,导致所有线程都无法继续执行,使程序陷入无尽的阻塞

生产者消费者

多个同步方法能按照先后顺序交替执行

方法:

  • wait():使当前线程进入等待状态, 并且会释放锁

  • notify():随机唤醒一个处于wait状态的线程

  • notifyAll:唤醒所有处于wait状态的线程

生产者:负责生成数据

消费者:负责消费生成的数据

public class Product {
    Integer num;
    boolean flag=true;
​
    public synchronized void provider(int num){//生产者:负责生成数据
        if(!flag){
            try {
                wait();
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }
        System.out.println("生产者正在生产......");
        this.num=num;
        flag=false;
     
  • 14
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值