微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

这篇文章主要介绍了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

本文主要介绍了JAVA开发过程中常用类库UUID、Optional、ThreadLocal、TimerTask、Base64的基础使用方法,更多关于UUID、Optional、ThreadLocal、TimerTask、Base64类库的详细使用方法请查看下面的相关链接

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐