![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
kross_
这个作者很懒,什么都没留下…
展开
-
Java小细节:List可以add(null)吗?
在写代码的时候,有时候遇到for循环,写到下面的时候有一点犹豫。List<Data> dataList = ...;for (Data d : dataList) { if (d != null) { // 我需要这个判断吗? // ... }}遍历的时候,是否需要对每个元素判空?换句话说,List是否可以允许add null。然后我实验了一...原创 2018-11-09 21:55:26 · 18797 阅读 · 0 评论 -
WeakReference, SoftReference, ReferenceQueue学习与实验
Java中有四种引用类型,分别是Strong, Soft, Weak, PhantomStrong ref:强引用,被引用的对象在gc的时候不会被回收。我们先来理解一下这句话是什么意思。先上一小段代码int num = 100;Object ref = new Object();上面两行代码,第一行声明了一个整型变量,它是放在程序栈上的。它是放在程序栈上的。这又是啥意思呢?我们...原创 2018-11-29 23:16:58 · 872 阅读 · 0 评论 -
线程有哪些状态?每个状态是什么意思?又是如何切换的?
线程大家都有在使用,但是有时候也仅仅是使用,对它的一些行为还不是特别的了解,今天就来和大家谈谈线程的状态这个内容。首先线程有哪些状态呢?这个问题,我们可以从Java的源代码中找到的答案,先简单粗暴,直接贴上代码,看看线程的状态有哪些:看完了,大家也知道了,线程有6个状态。这6个状态分别是:New, Runnable, Blocked, Waiting, Timed_Waiting, Te...原创 2019-08-06 00:46:35 · 5470 阅读 · 1 评论 -
多线程编程:wait, notify, join, yield都有啥用?
多线程在开发知识中是一个很重要的部分,然而实际生产中却很少遇到真正需要自己去处理多线程编程里的那些复杂细节和问题,因为很多时候,都有一套“架构”或者一些“框架”帮大部分业务程序员隐藏了多线程的细节,大多时候只需要简单的实现各种业务逻辑即可。今天来理一理wait, notify, join, yield这四个方法的作用。这4个方法,其中wait, notify都是Object的方法,join是T...原创 2019-08-10 14:10:26 · 311 阅读 · 0 评论 -
volatile的作用及正确的使用模式
volatile先从基础的知识说起吧,这样也有个来龙去脉。我们都知道,程序运行后,程序的数据都会被从磁盘加载到内存里面(主存)而当局部的指令被执行的时候,内存中的数据会被加载到更加靠近CPU的各级缓存,以及寄存器中。当一个多线程程序执行在一个多核心的机器上时,就会出现真正的并行情况,每个线程都独立的运行在一个CPU上,每个CPU都有属于自己独立的周边缓存。那么此时,一个变量被两个线程...原创 2019-08-24 14:46:26 · 259 阅读 · 0 评论 -
Kotlin协程教程(1):启动
协程协程简单的来说,就是用户态的线程。emmm,还是不明白对吧,那想象一个这样的场景,如果在一个单核的机器上有两个线程需要执行,因为一次只能执行一个线程里面的代码,那么就会出现线程切换的情况,一会需要执行一下线程A,一会需要执行一下线程B,线程切换会带来一些开销。假设两个线程,交替执行,如下图所示线程会因为Thread.sleep方法而进入阻塞状态(就是什么也不会执行),这样多浪费资源啊...原创 2019-08-27 20:53:16 · 476 阅读 · 0 评论 -
Kotlin协程教程(2):协程作用域与各种builder们
作用域与上下文协程作用域本质是一个接口,既然是一个接口,那么它就可以被某个类去实现(implement),实现它的那个类,也就具备了一些能力。class MyClass: CoroutineScope { // MyClass就具备了CoroutineScope的一些能力}那么它具备了哪些能力呢?当然是启动协程的能力和停止协程的能力。除了runBlocking有一些特殊外,la...原创 2019-08-29 19:57:17 · 504 阅读 · 0 评论 -
Kotlin协程教程(3):操控协程
在之前的文章中,已经讲了如何启动协程、协程的作用域是如何组织和工作的以及各种协程构造器(builder)的特性。本篇将讲解对协程的各种操作,包括挂起、取消、超时、切换上下文等。挂起fun main() { runBlocking(Dispatchers.Default) { for (i in 0 .. 10) { println("aaaa...原创 2019-08-29 19:59:38 · 263 阅读 · 0 评论