Java多线程学习笔记

作者:Grey 原文地址:Java多线程学习笔记 什么是程序,进程和线程? 程序是计算机的可执行文件 进程是计算机资源分配的基本单位 线程是资源调度执行的基本单位 一个程序里面不同的执行路径 多个线程共享进程中的资源 线程和进程的关系 线程就是轻量级进程,是程序执行的最小单位。 多进程的方式也可以实 ... »

线程、多线程和线程池,看完这些你就能全部搞懂了

摘要:一文带你搞懂线程、多线程和线程池。 一.线程 在操作系统中,线程是比进程更小的能够独立运行的基本单位。同时,它也是CPU调度的基本单位。线程本身基本上不拥有系统资源,只是拥有一些在运行时需要用到的系统资源,例如程序计数器,寄存器和栈等。一个进程中的所有线程可以共享进程中的所有资源。 二.多线程 ... »

面试官:Java中线程是按什么顺序执行的?

摘要:Java中多线程并发的执行顺序历来是面试中的重点,掌握Java中线程的执行顺序不仅能够在面试中让你脱颖而出,更能够让你在平时的工作中,迅速定位由于多线程并发问题导致的“诡异”问题,让你从工作中脱颖而出。 本文分享自华为云社区《【高并发系列】Java中线程到底是按什么顺序执行的?你了解的可能是错 ... »

锋利的NodeJS之NodeJS多线程

最近刚好有朋友在问Node.js多线程的问题,我总结了一下,可以考虑使用源码包里面的worker_threads或者第三方的模块来实现。 首先明确一下多线程在Node.js中的概念,然后在聊聊worker_threads的用法。天生异步,真心强大。 Node.js多线程概述 有人可能会说,Node. ... »

Java volatile关键字详解

Java volatile关键字详解 volatile是java中的一个关键字,用于修饰变量。被此关键修饰的变量可以禁止对此变量操作的指令进行重排,还有保持内存的可见性。 简言之它的作用就是: 禁止指令重排 保持内存的可见性 禁止指令重排 CPU在执行代码时,为了提高执行效率,有时会将代码乱序执行。 ... »

生产者消费者问题

生产者消费者问题 背景 在并发编程中,生产者消费者问题(producer/consumer)是一个经典的老生常谈的问题,有时也称为有界缓冲区问题。 问题的基本背景假设是:我们有一个固定大小的缓冲区,这个缓冲区分别有两种工作性质不同的线程去操作。其中一种线程负责向缓冲区中写入数据,我们称之为生产者线程 ... »

面试官问:“在项目中用过多线程吗?”你就把这个案例讲给他听!

在面试当中,有时候会问到你在项目中用过多线程么? 对于普通的应届生或者工作时间不长的初级开发 ???—— crud仔流下了没有技术的眼泪。 博主这里整理了项目中用到了多线程的一个简单的实例,希望能对你有所启发。 多线程开发实例 应用背景 应用的背景非常简单,博主做的项目是一个审核类的项目,审核的数据 ... »

多线程与锁 + 常见面试题

多线程 1. 常见概念: 1. yield,join,notify和notifyAll yield(方法是停止当前线程,让同等优先权的线程或更高优先级的线程有执行的机会。如果没有的话,那么yield方法将不会起作用,并且由可执行状态后马上又被执行。 join方法是用于在某一个线程的执行过程中调用另一 ... »

linux调度全景指南

​ | 导语 本文主要是讲Linux的调度系统, 由于全部内容太多,分三部分来讲,调度可以说是操作系统的灵魂,为了让CPU资源利用最大化,Linux设计了一套非常精细的调度系统,对大多数场景都进行了很多优化,系统扩展性强,我们可以根据业务模型和业务场景的特点,有针对性的去进行性能优化,在保证客户网络 ... »

JVM系列(四):java方法的查找过程实现

经过前面几章的简单介绍,我们已经大致了解了jvm的启动框架和执行流程了。不过,这些都是些无关痛痒的问题,几行文字描述一下即可。 所以,今天我们从另一个角度来讲解jvm的一些东西,以便可以更多一点认知。即如题:jvm是如何找到对应的java方法,然后执行的呢?(但是执行太复杂,太重要,我们就不说了。我 ... »

多线程【线程池】

一、什么是线程池 线程池:指在初始化一个多线程应用程序过程中创建一个线程集合,然后在需要执行新的任务时重用这些线程而不是新建一个线程, 一旦任务已经完成了,线程回到池子中并等待下一次分配任务。 ... »

线程池源码分析

概述 在 java 中,线程池 ThreadPoolExecutor 是一个绕不过去的类,它是享元模式思想的体现,通过在容器中创建一定数量的线程加以重复利用,从而避免频繁创建线程带来的额外开销。一个设置合理的线程池可以提高任务响应的速度,并且避免线程数超过硬件能力带来的意外情况。 在本文,将深入线程 ... »

JVM系列(三):JVM创建过程解析

上两篇中梳理了整个java启动过程中,jvm大致是如何运行的。即厘清了我们认为的jvm的启动过程。但那里面仅为一些大致的东西,比如参数解析,验证,dll加载等等。把最核心的loadJavaVM()交给了一个dll或者so库。也就是真正的jvm我们并没有接触到,我们仅看了一个包装者或者是上层应用的实现 ... »

撸完这篇线程池,我快咳血了!

我们知道,线程需要的时候要进行创建,不需要的时候需要进行销毁,但是线程的创建和销毁都是一个开销比较大的操作。 为什么开销大呢? 虽然我们程序员创建一个线程很容易,直接使用 new Thread() 创建就可以了,但是操作系统做的工作会多很多,它需要发出 系统调用,陷入内核,调用内核 API 创建线程 ... »

一张图解决ThreadLocal

一张图解决ThreadLocal 一、前言 年底梳理知识体系时,研究了一下ThreadLocal的源码,整理了一张核心图。 想着,都走到这一步了,那就写一篇深度解读的文章吧。看过我之前文章的小伙伴都知道,我写博客,就喜欢写点别人没写的。要么就写个结构比别人好的。什么都不行,那就别写了。自己留着看就好 ... »

C#异步和多线程以及Thread、ThreadPool、Task区别和使用方法

本文的目的是为了让大家了解什么是异步?什么是多线程?如何实现多线程?对于当前C#当中三种实现多线程的方法如何实现和使用?什么情景下选用哪一技术更好? 第一部分主要介绍在C#中异步(async/await)和多线程的区别,以及async/await使用方法。 第二部分主要介绍在C#多线程当中Threa ... »

深入浅出Java线程池:源码篇

前言 在上一篇文章深入浅出Java线程池:理论篇中,已经介绍了什么是线程池以及基本的使用。(本来写作的思路是使用篇,但经网友建议后,感觉改为理论篇会更加合适)。本文则深入线程池的源码,主要是介绍ThreadPoolExecutor内部的源码是如何实现的,对ThreadPoolExecutor有一个更 ... »

深入浅出Java线程池:使用篇

前言 很高兴遇见你~ 借助于很多强大的框架,现在我们已经很少直接去管理线程,框架的内部都会为我们自动维护一个线程池。例如我们使用最多的okHttp以及他的封装框架Retrofit,线程封装框架RxJava和kotlin协程等等。为了更好地使用这些框架,则必须了解他的实现原理,而了解他的原理,线程池是 ... »

并发条件队列之Condition 精讲

1. 条件队列的意义 Condition将Object监控器方法( wait , notify和notifyAll )分解为不同的对象,从而通过与任意Lock实现结合使用,从而使每个对象具有多个等待集。 Lock替换了synchronized方法和语句的使用,而Condition替换了Object监 ... »

在nodejs中创建child process

在nodejs中创建child process 简介 nodejs的main event loop是单线程的,nodejs本身也维护着Worker Pool用来处理一些耗时的操作,我们还可以通过使用nodejs提供的worker_threads来手动创建新的线程来执行自己的任务。 本文将会介绍一种新 ... »