摘要:
有些场景的代码执行后,结果不一定会被使用,从而造成性能浪费。而Lambda表达式是延迟执行的,这正好可以作为解决方案,提升性能。 性能浪费的日志案例(字符串拼接) 注:日志可以帮助我们快速的定位问题,记录程序运行过程中的情况,以便项目的监控和优化。 一种典型的场景就是对参数进行有条件使用,例如对日志
阅读全文
posted @ 2022-02-09 12:13
周文豪
阅读(683)
推荐(0)
摘要:
只有在需要的时候才创建对象,如下的字符串对象。 String str = "aaa"; if (i == 1){ list.add(str); } //建议替换成 if (i == 1){ String str = "aaa"; list.add(str); }
阅读全文
posted @ 2022-02-09 12:07
周文豪
阅读(53)
推荐(0)
摘要:
通过前面内容我们了解了synchronized,虽然JVM对它做了很多优化,但是它还是一个重量级的锁。而接下来要介绍的volatile则是轻量级的synchronized。 如果一个变量使用volatile,则它比使用synchronized的成本更加低,因为它不会引起线程上下文的切换和调度。 Ja
阅读全文
posted @ 2022-02-07 21:05
周文豪
阅读(198)
推荐(0)
摘要:
synchronized是重量级锁,效率不高。 但在jdk 1.6中对synchronize的实现进行了各种优化,使得它显得不是那么重了。jdk1.6对锁的实现引入了大量的优化,如自旋锁、适应性自旋锁、锁消除、锁粗化、偏向锁、轻量级锁等技术来减少锁操作的开销。 锁主要存在四种状态,依次是:无锁状态、
阅读全文
posted @ 2022-02-07 18:16
周文豪
阅读(103)
推荐(0)
摘要:
一、内存可见性 1、内存可见性介绍 可见性: 一个线程对共享变量值的修改,能够及时的被其他线程看到 共享变量: 如果一个变量在多个线程的工作内存中都存在副本,那么这个变量就是这几个线程的共享变量 线程 A 与线程 B 之间如要通信的话,必须要经历下面 2 个步骤: (1)、首先,线程 A 把本地内存
阅读全文
posted @ 2022-02-07 17:30
周文豪
阅读(666)
推荐(0)
摘要:
JVM内存结构、Java对象模型和Java内存模型,这就是三个截然不同的概念,而这三个概念很容易混淆。这里详细区别一下 一、JVM内存结构(5个部分) 我们都知道,Java代码是要运行在虚拟机上的,而虚拟机在执行Java程序的过程中会把所管理的内存划分为若干个不同的数据区域,这些区域都有各自的用途。
阅读全文
posted @ 2022-02-07 17:03
周文豪
阅读(397)
推荐(0)
摘要:
优先级priority:当线程需要竞争CPU资源时,优先级高的能分配更多的CPU资源。 现今操作系统基本采用分时的形式调度运行的线程,线程分配得到时间片的多少决定了线程使用处理器资源的多少,也对应了线程优先级这个概念。 分时调度:所有线程轮流使用 CPU 的使用权,平均分配每个线程占用 CPU 的时
阅读全文
posted @ 2022-02-07 15:55
周文豪
阅读(237)
推荐(0)
摘要:
结束线程有以下三种方法: (1)设置退出标志,使线程正常退出。 (2)使用interrupt()方法中断线程。 (3)使用stop方法强行终止线程(不推荐使用Thread.stop, 这种终止线程运行的方法已经被废弃,使用它们是极端不安全的!) 一、使用退出标志 一般run()方法执行完,线程就会正
阅读全文
posted @ 2022-02-07 15:40
周文豪
阅读(243)
推荐(0)
摘要:
除非能确定一整个方法都是需要进行同步的,否则尽量使用同步代码块,避免对那些不需要进行同步的代码也进行了同步,影响了代码执行效率。 用关键字synchronized声明方法在某些情况下是有弊端的,比如A线程调用同步方法执行一个较长时间的任务,那么B线程必须等待比较长的时间。这种情况下可以尝试使用syn
阅读全文
posted @ 2022-02-06 22:24
周文豪
阅读(85)
推荐(0)
摘要:
注意:有两个前提,一个是数组赋值,一个是大量复制。 java.lang.System类中提供了大量的静态方法,可以获取与系统相关的信息或系统级操作,在System类的API文档中,常用的方法有: public static void arraycopy(Object src, int srcPos,
阅读全文
posted @ 2022-01-24 15:44
周文豪
阅读(420)
推荐(0)