
java
2Tree
专注后端开发
展开
-
java是使用阻塞队列处理日志
一、使用BlockingQueuepackage com.tree.springcloud.log;import java.util.concurrent.BlockingQueue;import java.util.concurrent.LinkedBlockingQueue;/** * @author zhong * @version 1 * @date 2021/03/12 * @contact 1478168700@qq.com **/public class SysL.原创 2021-03-13 10:15:31 · 444 阅读 · 0 评论 -
常见的4种线程池
1、newCachedThreadPool:/** * 一个可缓存线程池,如果线程池长度超过需要处理需要,可灵活回收空闲线程,若无可回收,则新建线程 * 适合短时间的任务 * 缺点:要问题是线程数最大数是Integer.MAX_VALUE,可能会创建数量非常多的线程,甚至OOM。 */2、newFixedThreadPool:/** * 定长线程池,可以控制线程最大并发数,超出的任务会在队列中等待 * 缺点:要问题是堆积的请求处理队列可能会耗费非常大的内存,甚至OOM。 */原创 2021-03-04 10:33:19 · 7018 阅读 · 2 评论 -
@Aspect记录webLog
@Aspect记录webLogpackage org.tree.learndemo.aop;import org.aspectj.lang.JoinPoint;import org.aspectj.lang.annotation.*;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.core.annotation.Order;import org.springframewo.原创 2021-03-02 16:32:44 · 216 阅读 · 0 评论 -
服务器配置需要注意的问题
服务器配置1. 【推荐】高并发服务器建议调小 TCP 协议的 time_wait 超时时间。 说明:操作系统默认 240 秒后,才会关闭处于 time_wait 状态的连接,在高并发访问下,服务器端会因为 处于 time_wait 的连接数太多,可能无法建立新的连接,所以需要在服务器上调小此等待值。 正例:在 linux 服务器上请通过变更/etc/sysctl.conf 文件去修改该缺省值(秒): net.ipv4.tcp_fin_timeout = 30 2. 【推荐】调大服务器所.原创 2021-02-27 15:20:10 · 704 阅读 · 0 评论 -
手动创建线程池
4. 【强制】线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式,这 样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。 说明:Executors 返回的线程池对象的弊端如下: 1) FixedThreadPool 和 SingleThreadPool: 允许的请求队列长度为 Integer.MAX_VALUE,可能会堆积大量的请求,从而导致 OOM。 /** * Creates a thread pool tha原创 2021-02-26 20:12:42 · 510 阅读 · 0 评论 -
java的双重检查锁问题
通过双重检查锁(double-checked locking)(在并发场景下)实现延迟初始化的优化 问题隐患(可参考 The "Double-Checked Locking is Broken" Declaration),推荐解决方案中较为 简单一种(适用于 JDK5 及以上版本),将目标属性声明为 volatile 型(比如修改 helper 的属 性声明为`private volatile Helper helper = null;`)。 反例: public class LazyInitDem原创 2021-02-26 20:00:17 · 508 阅读 · 0 评论 -
java中Map类集合K/V是否能为null的值的情况
原创 2021-02-26 14:50:14 · 594 阅读 · 1 评论 -
使用ThreadPoolExecutor创建线程池有哪些关键参数
1、ThreadPoolExecutor类的全参数构造方法:/** * Creates a new {@code ThreadPoolExecutor} with the given initial * parameters. * * @param corePoolSize the number of threads to keep in the pool, even * if they are idle, unless {@code .原创 2020-09-23 22:01:40 · 703 阅读 · 0 评论 -
CAS和AQS名称解析。
1、CAS(Compare And Swap):解决多线程并行情况下使用锁造成性能损耗的一种机制,这是 硬件实现的原子操作。CAS 操作包含三个操作数:内存位置、预期原值和新值。如果内存位 置的值与预期原值相匹配,那么处理器会自动将该位置值更新为新值。否则,处理器不做任何操作。 2、AQS(AbstractQueuedSynchronizer): 利用先进先出队列实现的底层同步工具类,它是很多上 层同步实现类的基础,比如:ReentrantLock、CountDownLatch、Semaphore 等,原创 2020-09-23 21:45:46 · 249 阅读 · 0 评论 -
java基础之基础类型的自动装箱
public class JavaBase { public static void main(String[] args) { autoBoxing(); } /** * 装箱就是自动将基本数据类型转换为包装器类型(int-->Integer);调用方法:Integer的 * valueOf(int) 方法 * 拆箱就是自动将包装器类型转换为基本数据类型(Integer-->int)。调用方法:Integer的intVa.原创 2020-06-05 10:59:46 · 252 阅读 · 0 评论 -
java基础,java只有值传递
package com.zhong;/** * java只有值传递 */public class JavaPassByValue { public static void main(String[] args) { int num1 = 10; int num2 = 20; //1。一个方法不能修改一个基本数据类型的参数(即数值型或布尔型》的值 swap(num1, num2); System.out.p.原创 2020-06-04 16:34:44 · 211 阅读 · 0 评论 -
java多线程,三个线程顺序打印ABC,打印5次。使用三个Semaphore实现。
package com.zhong.thread;import java.util.concurrent.Semaphore;/** * 使用Semaphore实现三个线程顺序打印ABC 5次 */public class MultipleThreadRotationUsingSemaphore { public static void main(String[] args) { PrintABCUsingSemaphore printABC = new Prin.原创 2020-06-02 15:07:07 · 1015 阅读 · 0 评论 -
java多线程,三个线程轮流执行顺序打印ABC,循环5次。使用三个Condition实现。
package com.zhong.thread;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.ReentrantLock;/** * 三个线程依次输出A,B,C,循环5次。 * 输出结果: * ABC * ABC * ABC * ABC * ABC */public class SequencePrintDemo { private static volat.原创 2020-06-02 15:24:41 · 2209 阅读 · 0 评论 -
java多线程之生产者-消费者使用阻塞队列实现
package com.zhong.thread;import java.util.Random;import java.util.concurrent.LinkedBlockingDeque;/** * 使用阻塞队列实现生产者-消费者 */public class BlockQueue { public static void main(String[] args) { LinkedBlockingDeque<String> link = new Li.原创 2020-06-02 12:55:25 · 506 阅读 · 0 评论 -
java多线程之生产者-消费者使用Object的wait()和notify()方法实现
package com.zhong.thread;import java.util.ArrayList;import java.util.List;/** * 使用 wait,notify 实现生产消费者 */public class Stock { private volatile int maxnum = 10; //最大的容量通知消费者 private volatile int minmun = 0; //最小的容量通知生产者 private St.原创 2020-06-02 12:54:04 · 277 阅读 · 0 评论 -
jmm java内存模型
原创 2020-03-21 13:12:30 · 245 阅读 · 0 评论 -
volatile是什么
volatile1.保证可见性2.不保证原子性3.禁止指令重排原创 2020-03-21 13:13:58 · 178 阅读 · 0 评论 -
java面试题,try-catch-finally的返回结果
代码:package com.example.demo;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class DemoAppli...原创 2020-03-06 20:13:45 · 389 阅读 · 0 评论 -
老规矩HelloWorld
public class HelloWorld{ public static void main(String[] args)//程序入口 { System.out.println("Hello,World!");//控制台输出Hello,World;其中双引号里面的内容可以任意内容 }}原创 2015-07-14 19:13:38 · 212 阅读 · 0 评论 -
java多线程
java创建线程有两种基本方法:1、编写一个类使其成为Thread的子类,并重写run()方法。 public class MyThread extends Thread { @Override public void run() {//线程体 for(int i=1;i System.out.p原创 2015-07-24 19:29:18 · 246 阅读 · 0 评论 -
Java
概念1:面向对象编程,使用对象进行软件设计。万事万物都是对象,对象就是属性以及对属性的操作的集合。类(class)的概念:把对象的共同的部分进行抽象提取,得到类的概念。“人以群分,物以类聚。”对象(object)的概念:对象是类的实例。类和对象的关系:举个例子,小明(对象)是一个人(类);小黑也是一个人。小黑和小明都是人类的实例。原创 2015-07-14 19:10:46 · 267 阅读 · 0 评论 -
静态代理模式
静态代理三部曲:1、定义公共实现的接口。2、创建真实角色的对象。3、创建代理角色的对象,持有真实角色的引用。public class StaticProxy { //静态代理模式 public static void main(String[] args) { //1.创建真实角色对象 You you = new You(); //2.创建代...原创 2015-07-24 19:16:45 · 208 阅读 · 0 评论 -
java不依赖临时变量交换两个变量的值
java不依赖临时变量交换两个变量的值1.简单易懂的实现方式 int a=1,b=2; int temp = 0; temp = a; a = b; b= temp;2.算术算法int a=1,b=2;a = a+b;// a = 1+2 b = a-b;// b = a-b --> b=3-2 -->1a = a -b;// a = 3-1...原创 2018-03-17 13:32:15 · 1208 阅读 · 4 评论 -
Java中23种设计模式之适配者模式
适配器模式的作用就是在原来的类上提供新功能。主要可分为3种:1.类适配:创建新类,继承源类,并实现新接口,例如: class Adapter extends OldClass implements NewFunc{}2.对象适配:创建新类持源类的实例,并实现新接口,例如: class Adapter implements NewFunc { private OldClass ol...原创 2018-03-18 10:08:37 · 588 阅读 · 0 评论 -
java原型(Prototype)设计模式
原型模式就是讲一个对象作为原型,使用clone()方法来创建新的实例。public class Prototype implements Cloneable{ private String name; public String getName() { return name; } public void setName(String name...原创 2018-03-18 16:10:37 · 300 阅读 · 0 评论 -
java设计模式之代理模式1--静态代理
Java编程的目标是实现现实不能完成的,优化现实能够完成的,是一种虚拟技术。生活中的方方面面都可以虚拟到代码中。代理模式所讲的就是现实生活中的这么一个概念:助手。代理模式的定义:给某一个对象提供一个代理,并由代理对象控制对原对象的引用。1.)首先新建一个表演的接口package com.zhong.pattern.proxy;/** * 表演接口 * @author admin * */...原创 2018-03-19 14:28:24 · 139 阅读 · 0 评论 -
Java设计模式之代理模式2-动态代理(jdk实现)
这篇是接着上一篇继续介绍java设计模式之代理模式。下面讲解的是jdk实现动态代理。1.)首先我们要声明一个动态代理类,实现InvocationHandler接口package com.zhong.pattern.proxy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;/** * 演...原创 2018-03-19 15:08:43 · 208 阅读 · 0 评论 -
java设计模式之工厂模式--普通工厂方法模式(Factory Method)
1.普通工厂模式,就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。2.先定义一个接口:package com.zhong.pattern.factorymethod;/** * 发送接口 * @author admin * */public interface Sender { /** * 发送消息方法 * @param msg */ void send(S...原创 2018-03-19 17:56:36 · 291 阅读 · 0 评论 -
java变量类型
Java编程语言定义了以下几种变量:实例变量(非静态字段)从技术上讲,对象将其各个状态存储在“非静态字段”中,即在没有static关键字的情况下声明的字段。非静态字段也称为实例变量,因为它们的值对于类的每个实例(对每个对象都是唯一的),换句话说; 的currentSpeed一个自行车的是独立于currentSpeed另一个。类变量(静态字段)甲类变量是与声明任何字段static改性剂; 这告诉编译...翻译 2018-06-11 12:36:16 · 129 阅读 · 0 评论 -
java中的自动装箱与拆箱
/*** @author zh* java中的自动装箱与拆箱* 简单一点说,装箱就是自动将基本数据类型转换为包装器类型;拆箱就是自动将包装器类型转换为基本数据类型。*/public class Number { public static void main(String[] args) { /** Integer i1 = 128; // 装箱...原创 2018-06-12 09:03:53 · 507 阅读 · 0 评论 -
String 类的常见面试问题
String 类的常见面试问题:面试题一:String s1 = "abc"; // 常量池String s2 = new String("abc"); // new,堆内存中System.out.println(s1==s2); // false两个对象的地址值不一样。System.out.println(s1.equals(s2)); // t...原创 2018-06-12 09:04:16 · 147 阅读 · 0 评论 -
Java线程间通信 - PipedReader和PipedWriter
Java线程间通信长期以来一直是一个受欢迎的面试问题。在JDK 1.5版本中,ExecutorService和BlockingQueue带来了另一种更有效的方式,但是管道流方法也值得了解,在某些情况下可能会有用。目录什么是管道流PipedReader和PipedWriterJava线程间通信示例摘要什么是管道流管道流就像真正的管道管道。你把东西放在管道的一端 - 使用一些方...翻译 2019-01-10 17:06:46 · 343 阅读 · 0 评论 -
Java死锁示例和解决方案
通过示例学习以编程方式在Java中创建死锁。还学习检测死锁以及如何解决源代码中的死锁情况。在我之前的文章中,我写了关于在属性文件中发生任何更改时自动重新加载配置,我讨论了使用Java WatchService刷新应用程序配置。由于配置是共享资源,并且在通过Thread访问时,总是有可能编写错误的代码,这可能导致死锁情况。1.死锁在Java中,死锁是指最少两个线程在某些不同的资源上持有锁...翻译 2019-01-10 17:11:25 · 675 阅读 · 0 评论 -
使用ThreadPoolExecutor和Semaphore限制任务提交率
如果您知道在Web服务器中可以配置与服务器的最大并发连接数。如果超过此限制的连接到服务器,则必须等到释放或关闭其他一些连接。这种限制可以视为限制。节流是调节输出速率低于输入的系统的输入速率的能力。有必要阻止系统崩溃或耗尽资源。在与我以前的帖子之一BlockingQueue和ThreadPoolExecutor,我们了解到有关创建CustomThreadPoolExecutor其中有以下功能:...翻译 2019-01-10 17:17:08 · 1082 阅读 · 0 评论 -
Java多线程演化和主题
JDK发布方面的多线程概念根据JDK 1.x版本,此初始版本中只有少数类。非常具体,类/接口是:java.lang.Thread java.lang.ThreadGroup java.lang.Runnable java.lang.Process java.lang.ThreadDeath 和一些例外类例如java.lang.IllegalMonitorStateExcep...翻译 2019-01-11 11:47:30 · 218 阅读 · 3 评论 -
java常见的字符串(String)面试问题
我们所有人都必须通过java中与String类相关的面试问题。这些字符串访谈问题包括不变性和内存泄漏问题。我将尝试在这篇文章中介绍这些问题。常见的字符串面试问题1. Java中的String关键字是什么?2.为什么字符串是不可变的?3.什么是String常量池?4.关键字'实习生'用法5.匹配正则表达式?6.使用equals()和'=='进行字符串比较?7. String类中...翻译 2019-01-11 11:58:37 · 1747 阅读 · 0 评论 -
java是通过值传递还是通过引用传递?
关于“ java是通过值传递还是通过引用传递?”,存在大量争论。好吧,让我们最后一次结束,Java是通过值传递而不是通过引用传递。如果它已通过引用传递,我们应该能够像交换对象一样C,但我们不能在java中这样做。我们已经知道了,对吗?将实例传递给方法时,其内存地址会逐位复制到新的引用变量,因此都指向同一实例。但是如果更改内部方法的引用,原始引用将不会更改。如果它是通过引用传递,那么它也会改变。...翻译 2019-01-11 15:22:56 · 338 阅读 · 0 评论 -
java静态导入
正常的import声明从包中导入类,因此可以在没有包引用的情况下使用它们。类似地,静态导入声明从类中导入静态成员,并允许它们在没有类引用的情况下使用。静态导入声明还有两种形式:单静态导入和静态导入按需。单静态导入声明从类型中导入一个静态成员。static-import-on-demand声明导入一个类型的所有静态成员。静态导入声明的一般语法如下: //Single-static-im...翻译 2019-01-11 15:28:12 · 2932 阅读 · 0 评论 -
Java Wrapper(包装)类内部缓存
我们所有人都知道如何在java中创建对象,即使用new关键字。还有其他方法可以创建类的实例,但这不是重点。在java中创建的新实例占用堆中的一些内存空间,因此创建新对象始终是一个昂贵的过程。为了避免这种昂贵的对象创建过程,许多框架在这段时间内得到了发展,特别是以不同的方式进行资源池化。因此,可以理解,准备好对象有其自身的好处,也应该得到推广。包装类在java中是不可变的,对吧?“是”。所以...翻译 2019-01-11 15:47:37 · 777 阅读 · 0 评论 -
Java字符串类指南
Java字符串类指南一个Java的String表示不可变的字符序列,并曾经创造不能更改。字符串的类型为java.lang.String类。在此页面中,了解如何使用字符串文字和构造函数创建字符串,字符串方法以及与字符串转换和格式设置相关的各种字符串示例。1.在Java中创建String在Java中创建String有两种方法。 字符串字面量 字符串文字是在Java中创建字符串的最...翻译 2019-01-11 16:06:19 · 205 阅读 · 0 评论