
多线程
FuYouJ
这个作者很懒,什么都没留下…
展开
-
复习之路之JAVA多线程基础面试题
我自己总结的,我觉得很全了,本篇章针对多线程基础,不包括JUC 有几种实现线程的方法? 从不同的角度看有不同的答案,通常来说,可以分为两类,继承和实现的两种方式。 准确的讲,实现线程只有一种方式,那就是构造Thread类,但是在Thread类里面,他的run方法有两种情况。 第一种,实现一个runnable接口,重写他的run方法,然后再把这个实例传给Thread类,再让Thread类执行这个...原创 2020-03-18 11:39:20 · 1252 阅读 · 0 评论 -
你知道死锁,但是你知道活锁吗?
说来也是有趣,我完全是被代码带笑了。 什么是活锁? 线程没有阻塞,始终在运行,但是程序始终得不到进展,因为线程始终做重复的同样的事情。 假设有这样一堆恩爱夫妻,贫困年代,大家条件不好,有了吃的互相谦让,过于谦让,一张纸谦让,就会导致活锁。就是线程一直在运行,事情却没有任何进展。 和死锁相比,活锁更害人,因为活锁一直在消耗CPU资源,而死锁会阻塞。 定义一个 勺子类: static class Sp...原创 2020-02-15 22:01:57 · 270 阅读 · 0 评论 -
从Happens-before 原则说volatile和synchronized
什么是Happens-before ? 1.)Happens-before 规则是用来解决可见性问题的:在时间上,动作A发生在动作B之前,B保证能看见A,这就是Happens-before 原则。 2.)如果一个操作Happens-before 第二个操作,那么我们就说第一个操作对于第二个操作是可见的。 什么不是Happens-before ? 两个线程没有相互配合的机制,所以代码X和Y的执行结果...原创 2020-02-15 14:14:14 · 282 阅读 · 0 评论 -
一段代码演示代码重排序带来的影响
假设在类中,定义这样的4个变量。 private static int x = 0, y = 0; private static int a = 0, b = 0; 两行代码分别由两个线程进行如下的操作。 线程1: a = 1; x = b; 线程2: b = 1; y = a; 在一般的情况下,由于两个线程的快慢顺序前后顺序,均可能出现如下情况。 发生碰撞:a=...原创 2020-02-15 10:34:00 · 259 阅读 · 0 评论 -
JAVA中N种单例模式简单概括(防反射,克隆,序列化,实例化,多线程安全)
里面包括了老生常谈的饿汉式,懒汉式以及枚举类 静态代码块 序列化场景下,多线程场景下的问题。 话不多说,直接开干。 **饿汉式:**就是立即加载的意思,立即加载在中文中有着急,急迫的意思。所以就叫饿汉式吧。 1.饿汉式的最简洁版本 package 单例模式的几种写法.饿汉式; /** * @Author:FuYouJie * @Date Create in 2020/1/23 13:32...原创 2020-01-23 16:46:57 · 690 阅读 · 2 评论 -
多线程之notify唤醒的随机性
在看多线程核心技术这本书的时候,里面提到了一句,notify()方法可以随机唤醒等待队列中等待统一资源的“一个一个线程”。突然很疑惑什么是统一共享资源,是不是随机。于是改动书上的代码实验一下,看一年运行结果。 原来代码如下 package 线程间通信.wait_notify_size5; import java.util.ArrayList; import java.util.List; /...原创 2019-11-12 00:05:19 · 670 阅读 · 0 评论