JAVA開發(fā)常用類庫UUID、Optional、ThreadLocal、TimerTask、Base64使用方法與實(shí)例詳解
1、UUID類庫
UUID 根據(jù)時(shí)間戳實(shí)現(xiàn)自動(dòng)無重復(fù)字符串定義
// 獲取UUID public static UUID randomUUID() // 根據(jù)字符串獲取UUID public static UUID fromString(String name)
應(yīng)用:對(duì)文件進(jìn)行自動(dòng)命名處理
import java.util.UUID;
class Demo {
public static void main(String[] args) {
System.out.println(UUID.randomUUID());
// 85a8ccb1-88f8-4b3c-833d-d45b58e0204e
System.out.println(UUID.fromString("85a8ccb1-88f8-4b3c-833d-d45b58e0204e"));
// 85a8ccb1-88f8-4b3c-833d-d45b58e0204e
}
}
2、Optional類庫
Optional 主要功能是進(jìn)行null空指針處理
JDK >= 1.8
示例:?jiǎn)为?dú)處理null參數(shù)
class Message{
private String message;
public Message(String message) {
this.message = message;
}
public String getMessage(){
return this.message;
}
}
class Demo {
public static void showMessage(Message message) {
if(message != null){
System.out.println(message.getMessage());
}
}
public static void main(String[] args) {
Message message = new Message("這是消息");
showMessage(message);
showMessage(null);
}
}
幾個(gè)方法
public final class Optional<T> {
public static<T> Optional<T> empty() {
@SuppressWarnings("unchecked")
Optional<T> t = (Optional<T>) EMPTY;
return t;
}
public static <T> Optional<T> of(T value) {
return new Optional<>(value);
}
public static <T> Optional<T> ofNullable(T value) {
return value == null ? empty() : of(value);
}
public T get() {
if (value == null) {
throw new NoSuchElementException("No value present");
}
return value;
}
public T orElse(T other) {
return value != null ? value : other;
}
}
使用示例
import java.util.Optional;
/**
* 存入
*/
Optional<String> optOf = Optional.of("message");
// Optional<String> optOfNull = Optional.of(null);
// java.lang.NullPointerException
Optional<String> optOfNullable = Optional.ofNullable("message");
Optional<String> optOfNullableNull = Optional.ofNullable(null);
/**
* 取出
*/
System.out.println(optOf.get());
// message
System.out.println(optOfNullable.get());
// message
// System.out.println(optOfNullableNull.get());
// java.util.NoSuchElementException: No value present
System.out.println(optOf.orElse("default"));
// message
System.out.println(optOfNullable.orElse("default"));
// message
System.out.println(optOfNullableNull.orElse("default"));
// default
自定義函數(shù)實(shí)現(xiàn)
class Demo {
public static String getDefault(String object, String defaultValue){
return object != null ? object : defaultValue;
}
public static void main(String[] args) {
System.out.println(getDefault("message", "default"));
// message
System.out.println(getDefault(null, "default"));
// default
}
}
3、ThreadLocal類庫
ThreadLocal解決線程同步問題
public T get() public void set(T value) public void remove()
定義發(fā)送消息類
class Message{
private String message ;
public Message(String message) {
this.message = message;
}
public String getMessage(){
return this.message;
}
}
class Channel{
private static Message message;
public static void setMessage(Message msg){
message = msg;
}
public static void send(){
System.out.println(message.getMessage());
}
}
單線程下運(yùn)行
class Demo {
public static void main(String[] args) {
Message message = new Message("你好");
Chanel.setMessage(message);
Chanel.send();
// 你好
}
}
多線程下運(yùn)行,出現(xiàn)數(shù)據(jù)覆蓋現(xiàn)象
class Demo {
public static void main(String[] args) {
new Thread(()->{
Channel.setMessage(new Message("你好-1"));
Channel.send();
}, "線程-1").start();
new Thread(()->{
Channel.setMessage(new Message("你好-2"));
Channel.send();
}, "線程-2").start();
new Thread(()->{
Channel.setMessage(new Message("你好-3"));
Channel.send();
}, "線程-3").start();
/**
* 線程-2 你好-3
* 線程-1 你好-1
* 線程-3 你好-3
*/
}
}
改造 Channel
class Channel{
// private static Message message;
private static final ThreadLocal<Message> THREAD_LOCAL = new ThreadLocal<Message>();
public static void setMessage(Message msg){
THREAD_LOCAL.set(msg);
}
public static void send(){
System.out.println(Thread.currentThread().getName()
+ " "
+ THREAD_LOCAL.get().getMessage());
}
}
// 執(zhí)行后數(shù)據(jù)對(duì)應(yīng)
/**
線程-2 你好-2
線程-1 你好-1
線程-3 你好-3
*/
ThreadLocal, 只允許保存一個(gè)數(shù)據(jù)
4、TimerTask類庫定時(shí)調(diào)度
定時(shí)器進(jìn)行定時(shí)任務(wù)處理,實(shí)現(xiàn)了一種間隔觸發(fā)操作
java.util.TimerTask 定時(shí)任務(wù)處理
java.util.Timer 任務(wù)啟動(dòng)
// 定時(shí)啟動(dòng) public void schedule(TimerTask task, long delay) // 間隔任務(wù) public void scheduleAtFixedRate(TimerTask task, long delay, long period)
定義任務(wù)
import java.util.TimerTask;
class MyTask extends TimerTask{
@Override
public void run() {
System.out.println("任務(wù)啟動(dòng) " + System.currentTimeMillis());
}
}
示例:定時(shí)啟動(dòng),會(huì)卡主
import java.util.Timer;
class Demo {
public static void main(String[] args) {
Timer timer = new Timer();
timer.schedule(new MyTask(), 100);
// 任務(wù)啟動(dòng) 1574260837613
}
}
示例:間隔任務(wù)
class Demo {
public static void main(String[] args) {
Timer timer = new Timer();
timer.scheduleAtFixedRate(new MyTask(), 100, 1000);
}
}
5、Base64類庫加密與解密
加密解密示例
String message = "Hello Java";
String encodeMessage = new String(Base64.getEncoder().encode(message.getBytes()));
System.out.println(encodeMessage);
// SGVsbG8gSmF2YQ==
String decodeMessage = new String(Base64.getDecoder().decode(encodeMessage));
System.out.println(decodeMessage);
// Hello Java
最好的方法是使用2-3中加密程序,進(jìn)行多次加密
加密解密示例
import java.util.Base64;
class Crypto{
// 加密重復(fù)次數(shù),越高越安全
private static final int REPEAT = 3;
/**
* 加密處理
* @param message
* @return
*/
public static String encode(String message){
byte[] data = message.getBytes();
// 重復(fù)加密
for (int i = 0; i < REPEAT; i++) {
data = Base64.getEncoder().encode(data);
}
return new String(data);
}
public static String decode(String message){
byte[] data = message.getBytes();
for (int i = 0; i < REPEAT; i++) {
data = Base64.getDecoder().decode(data);
}
return new String(data);
}
}
class Demo {
public static void main(String[] args) {
String message = "Hello Java";
String encodeMessage = Crypto.encode(message);
System.out.println(encodeMessage);
// VTBkV2MySkhPR2RUYlVZeVdWRTlQUT09
String decodeMessage = Crypto.decode(encodeMessage);
System.out.println(decodeMessage);
// Hello Java
}
}
本文主要介紹了JAVA開發(fā)過程中常用類庫UUID、Optional、ThreadLocal、TimerTask、Base64的基礎(chǔ)使用方法,更多關(guān)于UUID、Optional、ThreadLocal、TimerTask、Base64類庫的詳細(xì)使用方法請(qǐng)查看下面的相關(guān)鏈接
相關(guān)文章
MyBatis-Plus中MetaObjectHandler沒生效完美解決
在進(jìn)行測(cè)試時(shí)發(fā)現(xiàn)配置的MyMetaObjectHandler并沒有生效,本文主要介紹了MyBatis-Plus中MetaObjectHandler沒生效完美解決,具有一定的參考價(jià)值,感興趣的可以了解一下2023-11-11
SpringBoot集成Mybatis-plus并實(shí)現(xiàn)自動(dòng)生成相關(guān)文件的示例代碼
Mybatis-Plus是一個(gè)優(yōu)秀的Mybatis增強(qiáng)工具,目前更新到3.1.1,本文通過示例代碼給大家介紹SpringBoot集成Mybatis-plus并實(shí)現(xiàn)自動(dòng)生成相關(guān)文件的問題,感興趣的朋友跟隨小編一起看看吧2021-12-12
java中字符進(jìn)行全角半角轉(zhuǎn)換示例代碼
全角:指一個(gè)字符占用兩個(gè)標(biāo)準(zhǔn)字符位置,而半角:指一字符占用一個(gè)標(biāo)準(zhǔn)的字符位置,在日常開發(fā)中經(jīng)常會(huì)遇到全角半角轉(zhuǎn)換的要求,下面這篇文章主要給大家介紹了關(guān)于java中字符進(jìn)行全角半角轉(zhuǎn)換的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。2017-08-08
springboot2.0以上調(diào)度器配置線程池的實(shí)現(xiàn)
這篇文章主要介紹了springboot2.0以上調(diào)度器配置線程池的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12
java基本教程之synchronized關(guān)鍵字 java多線程教程
這篇文章主要介紹了java的synchronized原理、synchronized基本規(guī)則、synchronized方法 和 synchronized代碼塊、實(shí)例鎖和全局鎖2014-01-01

