Java基础07(总结:线程之同步方法以及同步代码块)

10 篇文章 0 订阅

synchronized同步方法的总结:

{

        //中间包住操作共享数据的代码

}

1.同步方法仍然涉及到同步监视器,只是我们不需要显式的声明

2.非静态的同步方法,同步监视器是:this(就是当前对象)

3.静态的同步方法,同步监视器是当前类本身(就是类————也可以看成类是一个对象)

sleep() wait()区别:

sleep() 在Thread类(比较广泛)但不会主动的释放锁

wait()只能在同步代码块 或者同步方法中,要配合使用需要notify()去激活其他线程,执行完会自动释放锁

4.写一个线程安全的饿汉式(饿汉式天生就是线程安全的) 

饿汉式是指在类加载时就完成了实例化,因此不存在线程安全问题。以下是一个线程安全的饿汉式实现示例:

public class Singleton {
    private static final Singleton instance = new Singleton();

    private Singleton() {}

    public static Singleton getInstance() {
        return instance;
    }
}

在该实现中,我们将 Singleton 类的构造方法设为私有,使得在类外无法创建新的实例。同时,我们在类中创建了一个私有的静态成员变量 instance,用于存储唯一的实例,并在类加载时就进行初始化。由于 instance 的初始化是在类加载时进行的(static 关键字的作用),因此不存在线程安全问题。同时,我们提供了一个静态的公有方法 getInstance(),用于获取 Singleton 类的唯一实例。由于该实现中只存在一个实例,因此不需要进行线程同步。(因此存在唯一实例天生线程安全)

5.写一个线程安全的懒汉式

public class Singleton {

    // 声明一个私有的 Singleton 对象 instance,但不初始化它
    private static Singleton instance;

    // 声明一个私有的构造函数,防止其他类实例化 Singleton 类
    private Singleton() {}

    // 声明一个公有的静态方法,返回 Singleton 实例
    public static synchronized Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}
 

在 getInstance() 方法中,我们使用了 synchronized 关键字来确保线程安全。这样一来,当前线程获取实例时,其他线程就无法进行实例化操作,从而保证了线程安全。但这种方式并不高效,因为每次获取实例都需要等待同步锁。因此,我们可以考虑使用双重检查锁定的方式来提高效率。

步骤:首先---公共类---私有构造器----私有全局变量(饿汉式直接new对象,懒汉式等着new对象)--公有静态方法(饿汉式直接return 对象instance。 )懒汉式首先 在公有静态方法中加一个同步监视器--防止多个线程进入造成线程安全问题--然后需要判断对象地址是否为空指针,再new对象 然后return insatnce;

6.单例模式的好处

单例模式是一种常用的设计模式,在软件开发中可用于实现一些具有全局唯一性的对象或资源,具有以下好处:

  1. 节省资源:单例模式只创建一个实例,避免了重复创建和销毁对象的开销,减少了系统资源的消耗。

  2. 简化调用:由于单例模式只有一个实例,因此减少了不必要的对象创建和对象销毁操作,简化了对象调用的复杂度。

  3. 维护一致性:单例模式的全局唯一性可以保证对象状态的一致性,避免了多个对象对同一资源进行修改而引发的冲突问题。

  4. 提高效率:单例模式可以避免因为创建对象和销毁对象而导致的系统性能下降,同时也可以优化对象的访问速度,提高系统的运行效率。

  5. 实现容易:单例模式是一种经典的设计模式,实现简单,易于理解和维护,可以提高代码的可读性、可维护性和可扩展性。

java中穿件多线程的方式有4种:

继承Thread类

实现Runnable接口

实现Callable接口

线程池(响应速度提高,提高资源的重复利用率,便于管理)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Truswei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值