JAVA开发常用类库UUID、Optional、ThreadLocal、TimerTask、Base64使用方法与实例详解

网友投稿 251 2022-12-14


JAVA开发常用类库UUID、Optional、ThreadLocal、TimerTask、Base64使用方法与实例详解

1、UUID类库

UUID 根据时间戳实现自动无重复字符串定义

// 获取UUID

public static UUID randomUUID()

// 根据字符串获取UUID

public static UUID fromString(String name)

应用:对文件进行自动命名处理

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 主要功能是进行null空指针处理

JDK >= 1.8

示例:单独处理null参数

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);

}

}

几个方法

public final class Optional {

public static Optional empty() {

@SuppressWarnings("unchecked")

Optional t = (Optional) EMPTY;

return t;

}

public static Optional of(T value) {

return new Optional<>(value);

}

public static Optional 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 optOf = Optional.of("message");

// Optional optOfNull = Optional.of(null);

// java.lang.NullPointerException

Optional optOfNullable = Optional.ofNullable("message");

Optional 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

自定义函数实现

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()

定义发送消息类

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());

}

}

单线程下运行

class Demo {

public static void main(String[] args) {

Message message = new Message("你好");

Chanel.setMessage(message);

Chanel.send();

// 你好

}

}

多线程下运行,出现数据覆盖现象

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 THREAD_LOCAL = new ThreadLocal();

public static void setMessage(Message msg){

THREAD_LOCAL.set(msg);

}

public static void send(){

System.out.println(Thread.currentThread().getName()

+ " "

+ THREAD_LOCAL.get().getMessage());

}

}

// 执行后数据对应

/**

线程-2 你好-2

线程-1 你好-1

线程-3 你好-3

*/

ThreadLocal, 只允许保存一个数据

4、TimerTask类库定时调度

定时器进行定时任务处理,实现了一种间隔触发操作

java.util.TimerTask 定时任务处理

java.util.Timer 任务启动

// 定时启动

public void schedule(TimerTask task, long delay)

// 间隔任务

public void scheduleAtFixedRate(TimerTask task, long delay, long period)

定义任务

import java.util.TimerTask;

class MyTask extends TimerTask{

@Override

public void run() {

System.out.println("任务启动 " + System.currentTimeMillis());

}

}

示例:定时启动,会卡主

import java.util.Timer;

class Demo {

public static void main(String[] args) {

Timer timer = new Timer();

timer.schedule(new MyTask(), 100);

// 任务启动 1574260837613

}

}

示例:间隔任务

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中加密程序,进行多次加密

加密解密示例

import java.util.Base64;

class Crypto{

// 加密重复次数,越高越安全

private static final int REPEAT = 3;

/**

* 加密处理

* @param message

* @return

*/

public static String encode(String message){

byte[] data = message.getBytes();

// 重复加密

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开发过程中常用类库UUID、Optional、ThreadLocal、TimerTask、Base64的基础使用方法,更多关于UUID、Optional、ThreadLocal、TimerTask、Base64类库的详细使用方法请查看下面的相关链接


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java容器ArrayList原理解析
下一篇:JAVA面向对象 封装原理及实例解析
相关文章

 发表评论

暂时没有评论,来抢沙发吧~