Java Doc注释 @see:必须顶头写, 标签允许用户引用其他类的文档。具体使用方式如下: 语法格式: @see 全路径包名#方法名(参数类型列表) 例子 @link:任...
Java Doc注释 @see:必须顶头写, 标签允许用户引用其他类的文档。具体使用方式如下: 语法格式: @see 全路径包名#方法名(参数类型列表) 例子 @link:任...
没有set之前直接get得到是null,不会报空指针。
public class MainUse {
private static final ThreadLocal<Integer> threadLocal = new ThreadLocal<Integer>() {
/* @Override
protected Integer initialValue() {
return 0;
}*/
};
static class SetThread extends Thread {
@Override
public void run() {
Integer i = threadLocal.get();
System.out.println("SetThread: threadlocal value: " + i);
// threadLocal.set(1);
System.out.println("SetThread: threadlocal new value: " + threadLocal.get());
System.out.println("SetThread finished.");
}
}
static class GetThread extends Thread {
@Override
public void run() {
System.out.println("GetThread: threadlocal value:" + threadLocal.get());
}
}
public static void main(String[] args) {
SetThread setThread = new SetThread();
setThread.start();
try {
// 等待该线程运行完毕
setThread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
GetThread getThread = new GetThread();
getThread.start();
System.out.println("main thread: threadlocal value: " + threadLocal.get());
}
}
输出
SetThread: threadlocal value: null
SetThread: threadlocal new value: null
SetThread finished.
main thread: threadlocal value: null
GetThread: threadlocal value:null
Process finished with exit code 0
ThreadLocal作用、场景、原理1.ThreadLocal 是什么? 在JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的...
「如果没有先set的话,即在map中查找不到对应的存储,则会通过调用setInitialValue方法返回i,而在setInitialValue方法中,有一个语句是T value = initialValue(), 而默认情况下,initialValue方法返回的是null。」
你自己在结论里都写了,没set直接get找不到会返回null,这个是不会报空指针。至于你demo报空指针的原因是,你get返回的null作为Long类型拆箱转long类型的时候,调用
null.longValue() 这才是你空指针的原因,跟ThreadLocal啥的没关系。
总结就是:
1、ThreadLocal在get之前不set不会空指针;
2、java自动拆箱实际是调用了对象的方法将封装类型转为基本类型,只要是对象调用方法,就需要预防空指针。
该文章已归纳在本人 GitHub 的 Blog 仓库,欢迎 star 或者 watch。同时欢迎访问我的博客地址 https://gojun.me/ 有更多干货。 RTL ...
本文出自 “阿敏其人” 简书博客,转载或引用请注明出处。 LayerDrawable对应的XML的根元素是<layer-list>,,它使一种层次化显示的Drawable集合...
1.Android自带的api中有获取Location的方法 逻辑如下:1.先优先取得GPS和NetWork的提供的位置情报2.如果取不到,先获取PASSIVE的情报(其他应...
在ubuntu上交叉编译helloWorld到arm64的android手机上去。 这里NDK用的是r19及以上的版本。 1. 安装NDK 从下面的链接下载NDK,并解压:h...
目录 前言 最近在研究一些库的编译,上次是编译了SeetaFace2,这次就拿OpenSSL来编译下,然后编译完后集成到Android项目中简单的生成个MD5。 效果展示 实...
libandroid.so——frameworks/base/native/android libandroid_runtime.so——frameworks/base/co...
在上一篇文章AndroidX Media3之ExoPlayer简单使用(1)[https://www.jianshu.com/p/23d81c36f552]中介绍了ExoPl...
前言: 当我们在使用ScrollView的时候,当前页面超出Scrollview显示页面需要自动滚动到底部时,发现不能完全滚动到底部。这是因为Android下很多函数都是基于...
思考:TextView你设置字体12sp,那么TextView的高是多少?12sp?错,其实TextView是有默认上下padding的,你会发现他的高度高于12sp设置 a...
终于看懂了,其他博客写的什么玩意啊
getDimension()、getDimensionPixelSize()和getDimensionPixelOffset()的区别今天写代码的时候,需要从资源文件中读取一个长度值,用来设置控件的宽高,误以为getDimension()返回的就是资源里定义的dp值,后来发现不是我理解的那样。下面介绍一下g...
今天写代码的时候,需要从资源文件中读取一个长度值,用来设置控件的宽高,误以为getDimension()返回的就是资源里定义的dp值,后来发现不是我理解的那样。下面介绍一下g...
我只知道图很好看😍😍😍😍
Android ImageView 的scaleType 属性图解ImageView 是 Android 中最常用的控件之一,而在使用ImageView时,必不可少的会使用到它的scaleType属性。该属性指定了你想让ImageView如...
我是来学技术的吗/?我是来选老婆的😄
ImageView 是 Android 中最常用的控件之一,而在使用ImageView时,必不可少的会使用到它的scaleType属性。该属性指定了你想让ImageView如...
本文主要介绍协程的用法, 以及使用协程能带来什么好处. 另外, 也会粗略提一下协程的大致原理.本文的意义可能仅仅是让你了解一下协程, 并愿意开始使用它.如果想彻底理解协程, ...
目录 1.介绍 2.为什么要用ConstraintLayout 3.如何使用ConstraintLayout3.1 添加依赖3.2 相对定位3.3 角度定位3.4 边距3.5...