并发编程
Java技术大联盟
微信公众号: Java技术大联盟
展开
-
面试官:怎么使用两个线程循环打印出1~100?三个线程呢?
一、使用两个线程循环打印出1~100首先创建一个num类,该类的成员用于线程同步。public class Num { int i; boolean falg;}使用wait/notify机制+条件判断实现public class TestThread1 { public static void main(String[] args) { Num num=new Num(); Thread t1=new Thread原创 2021-02-07 22:00:50 · 1499 阅读 · 4 评论 -
全网最详细并发编程(1)---入门篇
并发编程1. 进程与线程1.1 进程与线程进程 ●程序由**指令和数据**组成,但这些指令要运行,数据要读写,就必须**将指令加载至 CPU,数据加载至内存**。在指令运行过程中还需要用到磁盘、网络等设备。**进程就是用来加载指令、管理内存、管理 IO 的** ●当一个程序被运行,**从磁盘加载这个程序的代码至内存,这时就开启了一个进程**。 ●**进程就可以视...原创 2020-04-23 12:02:51 · 2571 阅读 · 1 评论 -
全网最详细并发编程(2)---入门篇
全网最详细并发编程(2)—入门篇1. 共享模型之管程本节内容 ● 共享问题 ● synchronized ● 线程安全分析 ● Monitor ● wait/notify ● 线程状态转换 ● 活跃性 ● Lock1.1 共享带来的问题static int counter = 0;static void increment() // 临界区{ co...原创 2020-04-24 18:04:48 · 1323 阅读 · 0 评论 -
全网最详细并发编程(3)---入门篇
全网最详细并发编程(3)—入门篇1、 wait notify演示wait/notify运行结果2、wait/notify的正确使用姿势step 1 static final Object room = new Object(); static boolean hasCigarette = false; static boolean hasTakeout = fals...原创 2020-05-07 23:41:23 · 891 阅读 · 0 评论 -
全网最详细并发编程(4)---入门篇
全网最详细并发编程(4)—入门篇本文主要讲解ReentrantLock、一、 ReentrantLock相对于 synchronized 它具备如下特点 ● 可中断 ● 可以设置超时时间 ● 可以设置为公平锁 ● 支持多个条件变量 ● 与 synchronized 一样,都支持可重入基本语法// 获取锁reentrantLock.lock(); //此行放在try块内和外效果...原创 2020-05-09 15:21:26 · 846 阅读 · 1 评论 -
全网最详细并发编程(1)---进阶篇
全网最详细并发编程(1)—进阶篇一、共享模型之内存 之前的入门篇主要讲解的Monitor主要关注的是访问共享变量时,保证临界区代码的原子性,本文我们将进一步深入学习共享变量在多线程间的【可见性】问题与多条指令执行时的【有序性】问题。1.1 、 Java 内存模型JMM 即 Java Memory Model,它定义了主存、工作内存抽象概念,底层对应着 CPU 寄存器、缓存、硬件内存、CPU 指令优化等1.2、可见性退不出的循环先来看一个现象,main 线程对 run 变量的修改对于 t原创 2020-05-11 13:34:43 · 1033 阅读 · 0 评论 -
共享模型之CAS无锁(乐观锁,非阻塞)
共享模型之无锁本文的主要内容有:1、问题提出:转账案例解决思路-无锁class AccountCas implements Account { private AtomicInteger balance; //使用原子整形AtomicInteger public AccountCas(int balance) { this.balance = new AtomicInteger(balance); } @Override public原创 2020-05-14 10:15:06 · 961 阅读 · 0 评论 -
并发编程进阶之----共享模型之不可变
并发编程进阶之----共享模型之不可变1、日期转换的问题问题提出下面的代码在运行时,由于 SimpleDateFormat 不是线程安全的SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");for (int i = 0; i < 10; i++) { new Thread(() -> { try { log.debug("{}", sdf.parse("1951-04-21")); } catch (E原创 2020-05-14 11:52:57 · 501 阅读 · 0 评论 -
Java 线程池内容,全在这里了
/** * 1.未使用线程池 */public class ThreadDemo { public static void main(String[] args) { List<Integer> list = new LinkedList<Integer>(); long startTime = System.currentTimeMillis(); for (int i = 0; i < 100000; i++..转载 2020-05-25 16:28:15 · 571 阅读 · 0 评论 -
Fork/Join 框架
因为1~10000求和,耗时较少。下面我们将数据调大,求和1 ~ 59999999999(599亿),然后来对比一下使用 Fork/Join求和 和 普通求和之间的效率差异。1.普通求和public class ForkJoinDemo { public static void main(String[] args) { //开始时间 Long start = System.currentTimeMillis(); long sum ...转载 2020-05-25 16:26:57 · 350 阅读 · 0 评论 -
ThreadLocal,你想了解的都在这里(进来瞧瞧不后悔)
写在开头 在 Java 的多线程模块中,ThreadLocal是经常被提问到的一个知识点。1.什么是 ThreadLocalprivate static final ThreadLocal<T> threadLocal = new ThreadLocal<T>(); ThreadLocal 为我们提供了线程安全的另一种思路,我们平常说的线程安全主要是保证共享数据的并发访问问题,通过sychronized锁或者CAS无锁策略来保证数据的一致性。2.ThreadLoca转载 2020-05-25 22:51:45 · 796 阅读 · 0 评论