Fork me on GitHub
上一页 1 ··· 4 5 6 7 8 9 10 11 12 ··· 27 下一页
摘要: 单例模式是面试中的常客了,它的常见写法有 4 种:饿汉模式、懒汉模式、静态内部类和枚举,接下来我们一一来看。 1.饿汉模式 饿汉模式也叫预加载模式,它是在类加载时直接创建并初始化单例对象,所以它并不存在线程安全的问题。它是依靠 ClassLoader 类机制,在程序启动时只加载一次,因此不存在线程安 阅读全文
posted @ 2022-05-23 10:59 磊哥|www.javacn.site 阅读(422) 评论(1) 推荐(1) 编辑
摘要: Exchange(交换器)顾名思义,它是用来实现两个线程间的数据交换的,它诞生于 JDK 1.5,它有两个核心方法: exchange(V x):等待另一个线程到达此交换点,然后将对象传输给另一个线程,并从另一个线程中得到交换的对象。如果另一个线程未到达此交换点,那么此线程会一直休眠(除非遇了线程中 阅读全文
posted @ 2022-05-18 15:04 磊哥|www.javacn.site 阅读(452) 评论(0) 推荐(0) 编辑
摘要: 死锁(Dead Lock)指的是两个或两个以上的运算单元(进程、线程或协程),都在等待对方释放资源,但没有一方提起释放资源,从而造成了一种阻塞的现象就称为死锁。 比如线程 1 拥有了锁 A 的情况下试图获取锁 B,而线程 2 又在拥有了锁 B 的情况下试图获取锁 A,这样双方就进入相互阻塞等待的情况 阅读全文
posted @ 2022-05-16 12:27 磊哥|www.javacn.site 阅读(626) 评论(0) 推荐(2) 编辑
摘要: fastjson2 是 fastjson 项目的重要升级,目标是为下一个十年提供一个高性能的 JSON 库,同一套 API 支持JSON/JSONB 两种协议,JSONPath 是一等公民,支持全量解析和部分解析,支持 Java 服务端、客户端Android、大数据场景。 fastjson 2 代码 阅读全文
posted @ 2022-05-12 09:45 磊哥|www.javacn.site 阅读(1347) 评论(0) 推荐(0) 编辑
摘要: 从公平的角度来说,Java 中的锁总共可分为两类:公平锁和非公平锁。但公平锁和非公平锁有哪些区别?孰优孰劣呢?在 Java 中的应用场景又有哪些呢?接下来我们一起来看。 正文 公平锁:每个线程获取锁的顺序是按照线程访问锁的先后顺序获取的,最前面的线程总是最先获取到锁。 非公平锁:每个线程获取锁的顺序 阅读全文
posted @ 2022-05-09 09:31 磊哥|www.javacn.site 阅读(2915) 评论(0) 推荐(1) 编辑
摘要: 读写锁(Readers-Writer Lock)顾名思义是一把锁分为两部分:读锁和写锁,其中读锁允许多个线程同时获得,因为读操作本身是线程安全的,而写锁则是互斥锁,不允许多个线程同时获得写锁,并且写操作和读操作也是互斥的。总结来说,读写锁的特点是:读读不互斥、读写互斥、写写互斥。 1.读写锁使用 在 阅读全文
posted @ 2022-05-07 09:08 磊哥|www.javacn.site 阅读(2162) 评论(1) 推荐(0) 编辑
摘要: volatile 是 Java 并发编程的重要组成部分,也是常见的面试题之一,它的主要作用有两个:保证内存的可见性和禁止指令重排序。下面我们具体来看这两个功能。 内存可见性 说到内存可见性问题就不得不提 Java 内存模型,Java 内存模型(Java Memory Model)简称为 JMM,主要 阅读全文
posted @ 2022-05-05 11:22 磊哥|www.javacn.site 阅读(471) 评论(0) 推荐(0) 编辑
摘要: 在 Lock 接口中,获取锁的方法有 4 个:lock()、tryLock()、tryLock(long,TimeUnit)、lockInterruptibly(),为什么需要这么多方法?这些方法都有什么区别?接下来我们一起来看。 lock 方法 lock 方法是 Lock 接口中最基础的获取锁的方 阅读全文
posted @ 2022-04-27 12:22 磊哥|www.javacn.site 阅读(328) 评论(0) 推荐(0) 编辑
摘要: 早上收到阿里云小姐姐的消息,阿里云有搞事情了,这次是送一年的阿里云 ECS 服务器。有便宜不占王八蛋,二话不说,打开我 82 年的电脑,就是一顿操作。 没成想,这次的活动体验如此之好,也就 3 分钟的时间,就搞到了一年的阿里云服务器。 活动页面: 1.领取 ECS 服务器 打开活动页面: 选择最后一 阅读全文
posted @ 2022-04-26 08:59 磊哥|www.javacn.site 阅读(184) 评论(0) 推荐(0) 编辑
摘要: 在 Java 中,常用的锁有两种:synchronized(内置锁)和 ReentrantLock(可重入锁),二者的功效都是相同得,但又有很多不同点,所以我们今天就来聊聊。 区别1:用法不同 synchronized 可用来修饰普通方法、静态方法和代码块,而 ReentrantLock 只能用在代 阅读全文
posted @ 2022-04-24 15:27 磊哥|www.javacn.site 阅读(566) 评论(0) 推荐(0) 编辑
摘要: 做 Java 开发的小伙伴,对 wait 方法和 notify 方法应该都比较熟悉,这两个方法在线程通讯中使用的频率非常高,但对于 notify 方法的唤醒顺序,有很多小伙伴的理解都是错误的,有很多人会认为 notify 是随机唤醒的,但它真的是随机唤醒的吗? 带着这个疑问,我们尝试休眠 100 个 阅读全文
posted @ 2022-04-20 08:44 磊哥|www.javacn.site 阅读(317) 评论(1) 推荐(1) 编辑
摘要: 在 Java 中,让线程休眠的方法有很多,这些方法大致可以分为两类,一类是设置时间,在一段时间后自动唤醒,而另一个类是提供了一对休眠和唤醒的方法,在线程休眠之后,可以在任意时间对线程进行唤醒。 PS:休眠是指让某个线程暂停执行(进入等待状态),唤醒指的是让某个暂停的线程继续执行。 线程休眠的方法有以 阅读全文
posted @ 2022-04-18 08:05 磊哥|www.javacn.site 阅读(874) 评论(0) 推荐(1) 编辑
摘要: 想了解 synchronized 是如何运行的?就要先搞清楚 synchronized 是如何实现? synchronized 同步锁是通过 JVM 内置的 Monitor 监视器实现的,而监视器又是依赖操作系统的互斥锁 Mutex 实现的,那接下来我们先来了解一下监视器。 监视器 监视器是一个概念 阅读全文
posted @ 2022-04-14 08:40 磊哥|www.javacn.site 阅读(480) 评论(0) 推荐(0) 编辑
摘要: 在 Java 语言中,保证线程安全性的主要手段是加锁,而 Java 中的锁主要有两种:synchronized 和 Lock,我们今天重点来看一下 synchronized 的几种用法。 用法简介 使用 synchronized 无需手动执行加锁和释放锁的操作,我们只需要声明 synchronize 阅读全文
posted @ 2022-04-13 14:49 磊哥|www.javacn.site 阅读(2444) 评论(0) 推荐(0) 编辑
摘要: 线程安全是指某个方法或某段代码,在多线程中能够正确的执行,不会出现数据不一致或数据污染的情况,我们把这样的程序称之为线程安全的,反之则为非线程安全的。在 Java 中,解决线程安全问题有以下 3 种手段: 使用线程安全类,比如 AtomicInteger。 加锁排队执行 使用 synchronize 阅读全文
posted @ 2022-04-07 08:26 磊哥|www.javacn.site 阅读(645) 评论(0) 推荐(1) 编辑
摘要: 线程安全是指某个方法或某段代码,在多线程中能够正确的执行,不会出现数据不一致或数据污染的情况,我们把这样的程序称之为线程安全的,反之则为非线程安全的。 举个例子来说,比如银行只有张三一个人来办理业务,这种情况在程序中就叫做单线程执行,而单线程执行是没有问题的,也就是线程安全的。但突然有一天来了很多人 阅读全文
posted @ 2022-04-06 21:30 磊哥|www.javacn.site 阅读(472) 评论(0) 推荐(1) 编辑
摘要: 很多场景下,我们需要等待线程池的所有任务都执行完,然后再进行下一步操作。对于线程 Thread 来说,很好实现,加一个 join 方法就解决了,然而对于线程池的判断就比较麻烦了。 我们本文提供 4 种判断线程池任务是否执行完的方法: 使用 isTerminated 方法判断。 使用 getCompl 阅读全文
posted @ 2022-03-30 09:13 磊哥|www.javacn.site 阅读(2924) 评论(0) 推荐(0) 编辑
摘要: 在 Java 语言中,有两个线程池可以执行定时任务:ScheduledThreadPool 和 SingleThreadScheduledExecutor,其中 SingleThreadScheduledExecutor 可以看做是 ScheduledThreadPool 的单线程版本,它的用法和 阅读全文
posted @ 2022-03-28 10:44 磊哥|www.javacn.site 阅读(1887) 评论(0) 推荐(1) 编辑
摘要: 在 Java 中,线程池的状态和线程的状态是完全不同的,线程有 6 种状态:NEW:初始化状态、RUNNABLE:可运行/运行状态、BLOCKED:阻塞状态、WAITING:无时限等待状态、TIMED_WAITING:有时限等待状态和 TERMINATED:终止状态。而线程池的状态有以下 5 种: 阅读全文
posted @ 2022-03-23 11:07 磊哥|www.javacn.site 阅读(292) 评论(0) 推荐(0) 编辑
摘要: Nacos 支持两种 HTTP 服务请求,一个是 REST Template,另一个是 Feign Client。之前的文章咱们介绍过 Rest Template 的调用方式,主要是通过 Ribbon(负载均衡) + RestTemplate 实现 HTTP 服务调用的,请求的核心代码是这样的: @ 阅读全文
posted @ 2022-03-23 08:57 磊哥|www.javacn.site 阅读(1433) 评论(0) 推荐(0) 编辑
摘要: 在 Java 语言中,并发编程都是依靠线程池完成的,而线程池的创建方式又有很多,但从大的分类来说,线程池的创建总共分为两大类:手动方式使用 ThreadPoolExecutor 创建线程池和使用 Executors 执行器自动创建线程池。 那究竟要使用哪种方式来创建线程池呢?我们今天就来详细的聊一聊 阅读全文
posted @ 2022-03-21 09:27 磊哥|www.javacn.site 阅读(611) 评论(0) 推荐(0) 编辑
摘要: 在 Java 语言中,线程分为两类:用户线程和守护线程,默认情况下我们创建的线程或线程池都是用户线程,所以用户线程也被称之为普通线程。 想要查看线程到底是用户线程还是守护线程,可以通过 Thread.isDaemon() 方法来判断,如果返回的结果是 true 则为守护线程,反之则为用户线程。 我们 阅读全文
posted @ 2022-03-16 11:25 磊哥|www.javacn.site 阅读(775) 评论(0) 推荐(0) 编辑
摘要: 聊到线程池就一定会聊到线程池的执行流程,也就是当有一个任务进入线程池之后,线程池是如何执行的?我们今天就来聊聊这个话题。线程池是如何执行的?线程池的拒绝策略有哪些? 线程池执行流程 想要真正的了解线程池的执行流程,就得先从线程池的执行方法 execute() 说起,execute() 实现源码如下: 阅读全文
posted @ 2022-03-15 09:28 磊哥|www.javacn.site 阅读(1010) 评论(0) 推荐(0) 编辑
摘要: 负载均衡通器常有两种实现手段,一种是服务端负载均衡器,另一种是客户端负载均衡器,而我们今天的主角 Ribbon 就属于后者——客户端负载均衡器。 服务端负载均衡器的问题是,它提供了更强的流量控制权,但无法满足不同的消费者希望使用不同负载均衡策略的需求,而使用不同负载均衡策略的场景确实是存在的,所以客 阅读全文
posted @ 2022-03-14 08:49 磊哥|www.javacn.site 阅读(796) 评论(0) 推荐(1) 编辑
摘要: 在 Nacos 中,服务调用主要是通过 RestTemplate + Ribbon 实现的,RestTemplate 是 Spring 提供的 Restful 请求实现类,而 Ribbon 是客户端负载均衡器,通过 Ribbon 可以获取服务实例的具体信息(IP 和端口号),之后再通过 RestTe 阅读全文
posted @ 2022-03-10 10:52 磊哥|www.javacn.site 阅读(1385) 评论(0) 推荐(0) 编辑
上一页 1 ··· 4 5 6 7 8 9 10 11 12 ··· 27 下一页