![](https://img-blog.csdnimg.cn/20190918140037908.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
高并发多线程(Java提升篇)
文章平均质量分 92
深入学习Java多线程知识,具体章节包括Jvm部分内容,JMM内容,多线程深入,锁机制,并发框架类源码解析等,学完之后可以搭建完整的多线程知识体系。
老张聊天
微信公众号:老张聊天。
一起改变,一起提升,一起进步啊!
展开
-
JUC练习代码-力扣多线程1126题目:哲学家进餐,解题详解
想起来上学的时候好像就挺经典的一道算法题,一直没有自己试过去解决。刚好力扣上有这道题,于是试试看。题目描述就简单说了。5个哲学家5只筷子,要保证每个哲学家都能吃上饭。。哲学家从 0 到 4 按 顺时针 编号。请实现函数 void wantsToEat(philosopher, pickLeftFork, pickRightFork, eat, putLeftFork, putRightFork):philosopher 哲学家的编号。pickLeftFork 和 pickRightFork 表示拿起原创 2020-07-03 08:08:54 · 383 阅读 · 0 评论 -
JUC练习代码-力扣多线程1195题目:交替打印字符串,解题详解
题目描述编写一个可以从 1 到 n 输出代表这个数字的字符串的程序,但是:如果这个数字可以被 3 整除,输出 “fizz”。如果这个数字可以被 5 整除,输出 “buzz”。如果这个数字可以同时被 3 和 5 整除,输出 “fizzbuzz”。例如,当 n = 15,输出: 1, 2, fizz, 4, buzz, fizz, 7, 8, fizz, buzz, 11, fizz, 13, 14, fizzbuzz。假设有这么一个类:class FizzBuzz {public FizzBu原创 2020-07-03 08:01:10 · 766 阅读 · 0 评论 -
JUC练习代码-力扣多线程1117题目:H2O 生成,解题详解
题目描述现在有两种线程,氧 oxygen 和氢 hydrogen,你的目标是组织这两种线程来产生水分子。存在一个屏障(barrier)使得每个线程必须等候直到一个完整水分子能够被产生出来。氢和氧线程会被分别给予 releaseHydrogen 和 releaseOxygen 方法来允许它们突破屏障。这些线程应该三三成组突破屏障并能立即组合产生一个水分子。你必须保证产生一个水分子所需线程的结合必须发生在下一个水分子产生之前。换句话说:如果一个氧线程到达屏障时没有氢线程到达,它必须等候直到两个氢线原创 2020-07-03 07:56:01 · 231 阅读 · 0 评论 -
JUC练习代码-力扣多线程1116题目:打印零与奇偶数,解题详解
题目描述假设有这么一个类:class ZeroEvenOdd {public ZeroEvenOdd(int n) { … } // 构造函数public void zero(printNumber) { … } // 仅打印出 0public void even(printNumber) { … } // 仅打印出 偶数public void odd(printNumber) { … } // 仅打印出 奇数}相同的一个 ZeroEvenOdd 类实例将会传递给三个不同的原创 2020-07-03 07:52:14 · 343 阅读 · 0 评论 -
JUC练习代码-力扣多线程1115题目:交替打印FooBar,解题详解
题目描述我们提供一个类:class FooBar {public void foo() {for (int i = 0; i < n; i++) {print(“foo”);}}public void bar() {for (int i = 0; i < n; i++) {print(“bar”);}}}两个不同的线程将会共用一个 FooBar 实例。其中一个线程将会调用 foo() 方法,另一个线程将会调用 bar() 方法。请设计修改程序,以确保 “foobar原创 2020-07-03 07:43:11 · 262 阅读 · 0 评论 -
JUC练习代码-力扣多线程1114题目:按续打印,解题详解
经同事发现力扣上有多线程的题,于是花了1天多一些时间来尝试解答,在不参考答案的情况下。终于都搞定了。1114题目:我们提供了一个类:public class Foo {public void one() { print(“one”); }public void two() { print(“two”); }public void three() { print(“three”); }}三个不同的线程将会共用一个 Foo 实例。线程 A 将会调用 one() 方法线程 B 将会调用 two原创 2020-07-03 07:39:20 · 318 阅读 · 0 评论 -
JUC练习代码-Semaphore简易用法
public class SemaphoreTest { public static void main(String[] args) { //6辆车抢三个停车位 Semaphore semaphore = new Semaphore(3); for(int i=0;i<6;i++){ new Thread(()->{ try { semaph原创 2020-07-01 08:49:30 · 124 阅读 · 0 评论 -
JUC练习代码-CyclicBarrier的简单用法
public class CyclicBarrierTest { public static void main(String[] args) { CyclicBarrier cyclicBarrier=new CyclicBarrier(7,()->{ System.out.println("导游:大家都到齐啦,准备上车"); }); for (int i = 0; i <7; i++) {原创 2020-07-01 08:31:36 · 158 阅读 · 0 评论 -
JUC练习代码-CountDownLatch用法
public class CountDownLatchTest01 { public static void main(String[] args) throws InterruptedException { //发令枪准备 CountDownLatch startSignal=new CountDownLatch(1); //5个线程要一起到终点 CountDownLatch endSignal=new CountDownLatch(原创 2020-06-30 08:53:44 · 122 阅读 · 0 评论 -
JUC练习代码-JUC版本实现生产者消费者问题
public class JUCTest02 { public static void main(String[] args) throws InterruptedException { Data2 data = new Data2(); new Thread(() -> { for (int i = 0; i < 20; i++) { try { data.i原创 2020-06-23 18:15:00 · 225 阅读 · 0 评论 -
JUC练习代码-Synchronized实现生产者消费者问题
生产者消费者问题,用Synchronized关键字解决方法如下:两个线程操作同一个对象,一个进行+1操作,一个进行-1操作。本代码仅用于练习操作,不要直接在生产环境执行。public class JUCTest01 { public static void main(String[] args) throws InterruptedException { Data data = new Data(); new Thread(()->{原创 2020-06-23 08:35:30 · 133 阅读 · 0 评论 -
深入理解Java虚拟机(第三版)-02-HotSpot虚拟机对象探秘(2)
微信公众号:【老张聊天】一起改变,一起提升,一起进步啊!![欢迎大家扫码关注,转发,点赞!]以下大部分内容基于周志明的《深入理解Java虚拟机 第三版》,第三版相比第二版更新了很多知识点。pdf版本已经上传到网盘,微信扫码关注回复【jvm】获取网盘地址和提取码接着上一篇对象的创建,现在来讲下对象的内存布局。二、对象的内存布局HotSpot虚拟机中,对象的内存布局分为三个部分:【对象头(Head.原创 2020-05-14 08:42:09 · 315 阅读 · 0 评论 -
深入理解Java虚拟机(第三版)-02-HotSpot虚拟机对象探秘(1)
微信公众号:[攻城狮老张]又稳又重的老码农,分享工作生活经验。风趣幽默的段子手,总结编程专业知识。希望能用通俗易懂的语言,给小伙伴带来收获~[如果觉得对您有帮助,欢迎关注,转发,点赞!]以下大部分内容基于周志明的《深入理解Java虚拟机 第三版》,第三版相比第二版更新了很多知识点。pdf版本已经上传到网盘,微信扫码关注回复【jvm】获取网盘地址和提取码一、对象的创建创建对象,通常仅仅是一个new关键字(例外:复制,反序列化),本次讨论的对象限于普通Java对象,不包括数组和Class对象.原创 2020-05-13 09:22:10 · 584 阅读 · 0 评论 -
深入理解Java虚拟机(第三版)01-Java虚拟机运行时数据区介绍
微信公众号:[攻城狮老张]又稳又重的老码农,分享工作生活经验。风趣幽默的段子手,总结编程专业知识。希望能用通俗易懂的语言,给小伙伴带来收获~[如果觉得对您有帮助,欢迎关注,转发,点赞!]一、开篇说明老张最近在看多线程、锁的源码,但是在学习源码过程中,发现需要对Java虚拟机,以及JMM等有一个全面的理解,能更快的吸收源码中的知识。所以先更新Java虚拟机专栏内容。之前没有接触过的小伙伴也不用怕不用怂,其实这部分知识,大部分还是理论。推荐先看一遍视频学习,对整体有印象和概念后,再来看书补充细.原创 2020-05-12 08:27:54 · 355 阅读 · 0 评论