目录

菠萝🍍的博客

有谁不喜欢吃菠萝呢

标签: Java (16)

 【翻译】Java 8中的并行流处理--顺序流处理与并行流处理的性能对比

顺序流处理与并行流处理的性能对比

Java中的Unsafe类

这是一个普通类的创建 ... 仅仅只需要一行代码就完成了对象的实例化 这是Unsafe类的创建... 通过一个静态方法的调用,而方法中通过反射的方式创建出来Unsafe对象,为什么它需要通过这样的方式创建出来?

Java中的Atomic

说一说Java中的Atomic

volatile关键字

分析分析volatile是个啥

无停顿GC算法,ZGC原理

文章翻译的是,Azul Systems很多年前提出的Pauseless GC

根据文件,进行压缩为zip,批量下载

根据文件,进行压缩为zip,批量下载

MySQL 出现的时区问题【转载】

MySQL 出现的时区问题 使用低版本的MySQL jdbc驱动,不会存在时区的问题。 1.驱动版本 问题 Loading class com.mysql.jdbc.Driver. This is deprecated. The new driver class is com.mysql.cj.jdbc.Driver. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary. 启动时,发现提示说: 已经不赞成加载“com.mysql.jdbc.Driver”这个类,新的驱动类为“com.mysql.cj.jdbc.Driver”。 2.时区问题 发现读出数据库中的时间相差几个小时,这是由于数据库和系统时区差异所造成的。 需要在数据库连接串中设置时区。 serverTimezone=GMT即可解决问题,如果需要使用GMT+8时区,需要写成GMT%2B8,否则会被解析为空 serverTimezone=GMT%2B....

【LeetCode刷题】按序打印

原题:按序打印 我们提供了一个类: public class Foo { public void one() { print("one"); } public void two() { print("two"); } public void three() { print("three"); } } 三个不同的线程将会共用一个 Foo 实例。 线程 A 将会调用 one() 方法 线程 B 将会调用 two() 方法 线程 C 将会调用 three() 方法 请设计修改程序,以确保 two() 方法在 one() 方法之后被执行,three() 方法在 two() 方法之后被执行。 示例 1: 输入: [1,2,3] 输出: "onetwothree" 解释: 有三个线程会被异步启动。 输入 [1,2,3] 表示线程 A 将会调用 one() 方法,线程 B 将会调用 two() 方法,线程 C 将会调用 three() 方法。 正确的输出是 "onetwothree"。 示例 2: 输入: [1,3,2] 输出: "onetwothree" 解释: 输入 [1,3,2] 表示....

Java中的一些并发工具

1. 【转载】类CountDownLatch 1.1 CountDownLatch介绍 CountDownLatch是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程执行完后再执行。例如,应用程序的主线程希望在负责启动框架服务的线程已经启动所有框架服务之后执行。 1.2 CountDownLatch原理 CountDownLatch是通过一个计数器来实现的,计数器的初始化值为线程的数量。每当一个线程完成了自己的任务后,计数器的值就相应得减1。当计数器到达0时,表示所有的线程都已完成任务,然后在闭锁上等待的线程就可以恢复执行任务。 1.2.1 CountDownLatch的伪代码 Main thread start Create CountDownLatch for N threads Create and start N threads Main thead wait on latch N threads completes there tasks are returns Main thread resume execution 1.2.2 CountDownLatch....

JAVA并发编程: CAS和AQS

说起JAVA并发编程,就不得不聊聊CAS(Compare And Swap)和AQS了(AbstractQueuedSynchronizer)。

单例模式

因程序需要,有时我们只需要某个类同时保留一个对象,不希望有更多对象,此时,我们则应考虑单例模式的设计。

volatile实现机制

【转载】Java 并发编程:volatile的使用及其原理 作者:liuxiaopeng 博客地址:http://www.cnblogs.com/paddix/ valatile的作用 对volatile变量的单次读/写操作可以保证原子性的,如long和double类型变量,但是并不能保证i++这种操作的原子性,因为本质上i++是读、写两次操作。 volatile的使用 1、防止重排序 我们从一个最经典的例子来分析重排序问题。大家应该都很熟悉单例模式的实现,而在并发环境下的单例实现方式,我们通常可以采用双重检查加锁(DCL)的方式来实现。其源码如下: public class Singleton { public static volatile Singleton singleton; /** * 构造函数私有,禁止外部实例化 */ private Singleton() {}; public static Singleton getInstance() { if (singleton == null) { synchronized (singleton) { if (single....

synchronized(Java升级计划2)

synchronized原理 为什么会出现脏读呢? 当两个线程同时对一个共享数据进行操作的时候,如下图: 会把内存中的x=1读到工作空间,然后进行+1,这个时候就有一个CPU的时间片轮询的情况。当线程1进行执行的时候,读取x=1到工作空间,然后+1,刚好CPU轮询的时间到了,此时线程1中x=2的结果还没有刷新到内存中,导致线程2读取的数据是线程1更改数值之前的,出现脏读。 这里还有一种情况是,如果内存中的x=1是static修饰的,那么会出现跳号的情况,比如:线程1拿到x+1,此时x已经改为2了,但是没有输出,然后时间片轮询线程2执行,线程2拿到的值就是2了 当一段代码块被synchronized修饰的时候,那段代码被一个线程执行时,要么全部执行,要么都不执行,当执行到一半的时候,另一个线程进行访问,就会等待这个线程执行完成后再切换。此时synchronized具有的特性:独占性,排他性,可见性,原子性 为什么具有可见性呢?因为对于线程1中修改的值,线程2要能够感知到线程1把synchronized所包含的变量给修改了,此时对于线程2来说就具有可见性 synchronized (....

Java内存模型(Java升级计划1)

Java内存模型 JVM什么时候启动 类被调用的时候 启动JVM线程,再启动其他的线程,包括main线程,也就是JVM线程创建了其他的线程。 线程在JVM中是怎么运行的 方法区:存放的是一些加载的类信息(类加载器加载classload),常量,static变量,JIT编译后的代码。,也可以出现out of memory JIT编译(just-in-time compilation)狭义来说是当某段代码即将第一次被执行时进行编译,因而叫“即时编译”。JIT编译是动态编译的一种特例。JIT编译一词后来被泛化,时常与动态编译等价;但要注意广义与狭义的JIT编译所指的区别。 Java堆区:大量的实例对象,也可以出现out of memory 方法区和堆区可以实现信息共享 VIM Stack:Java在运行时的内存模型,数据私有,不能实现数据共享 每一个方法有唯一的栈帧去对应去存放数据 当栈帧放满了VIM Stack时,任然不断的添加,就会出现内存溢出,也可以出现out of memory 程序计数器(PC):Java线程的私有数据,这个数据就是执行下一条指令的地址,也就是说当这条指....

Java笔记

学习Java和工作中遇到的一些问题记录

手把手教你在Linux上部署Spring Boot项目

准备的东西: 1.项目使用maven在IDEA上打包好 2.xshell连接服务器 3.工具Xftp 步骤 linux服务器上安装jdk,maven 分别从官网下载jdk和maven 使用Xftp将下载到本地的jdk和maven复制到linux上 在复制的时候你可以现在linux上创建文件夹用来放置jdk和maven 在java文件夹中使用解压命令进行解压 tar -zxvf jdk1.8.0_201/ 在maven文件夹同上 配置linux的profile文件 和windows配置环境变量类似,在linux上也要配置 vi /etc/profile 按 i 进行插入,注意要输入你所配置的目录,以及jdk和maven解压出来的那个文件夹的名字 export JAVA_HOME=/usr/local/java/jdk1.8.0_201 export MAVEN_HOME=/usr/local/maven/apache-maven-3.6.0 export PATH=$JAVA_HOME/bin:$PATH:$MAVEN_HOME/bin export CLASSPATH=....