UUID
public static void main(String[] args) throws Exception {
String id = UUID.randomUUID().toString() ; // 生成UUID数据
System.out.println(id);
}
Optional
不用Optional时处理null
package com.yootk.demo;
interface IMessage { // 定义一个接口
public void send(String msg) ;
}
class Factory {
private Factory() {} ;
public static IMessage getInstance() {
return null ; // 假设没有返回
}
}
public class YootkDemo { // 李兴华编程训练营:yootk.ke.qq.com
public static void main(String[] args) throws Exception {
IMessage messageObject = Factory.getInstance() ; // 通过工厂获取IMessage接口对象
if (messageObject != null) {
messageObject.send("沐言优拓:www.yootk.com"); // 进行数据的发送
}
}
}
Optional简单的使用
public static void main(String[] args) throws Exception {
Optional optional = Optional.of("沐言优拓:www.yootk.com") ; // 字符串绝对不为null
if (optional.isPresent()) { // 有数据保存
String value = optional.get() ; // 从里面获取数据
System.out.println(value);
}
}
使用Optional获取值必不是null
package com.yootk.demo;
import java.util.Optional;
@FunctionalInterface
interface IMessage { // 定义一个接口
public void send(String msg) ;
}
class Factory {
private Factory() {} ;
public static Optional getInstance() {
return Optional.of((msg)->{
System.out.println("【消息发送】" + msg);
}) ; // 假设没有返回
}
}
public class YootkDemo { // 李兴华编程训练营:yootk.ke.qq.com
public static void main(String[] args) throws Exception {
IMessage messageObject = Factory.getInstance().get() ; // 可以保证返回的内容不为空
messageObject.send("沐言优拓:www.yootk.com");
}
}
ThreadLocal
没有ThreadLocal时多线程不用引用传递遇到的问题
package com.yootk.demo;
class Message { // 信息的操作类
private String content ; // 类中的属性
public void setContent(String content) {
this.content = content;
}
public String getContent() {
return content;
}
}
class MessagePrint { // 信息打印
public static void print() {
System.out.println("【MessagePrint】" + Resource.message.getContent());
}
}
class Resource { // 中间类
public static Message message ;
}
public class YootkDemo { // 李兴华编程训练营:yootk.ke.qq.com
public static void main(String[] args) throws Exception {
String[] values = new String[]{
"沐言科技:www.yootk.com",
"李兴华编程训练营:yootk.ke.qq.com",
"人才培养大纲:edu.yootk.com"}; // 每个线程执行各自的内容输出
for (String msg : values) {
new Thread(()->{
Resource.message = new Message();
Resource.message.setContent(msg); // 内容的设置
MessagePrint.print(); // 不再传递引用对象
}).start();
}
}
}
以上程序有问题,多线程运行,数据会出错的。
ThreadLocal多线程中保存数据package com.yootk.demo;
class Message { // 信息的操作类
private String content ; // 类中的属性
public void setContent(String content) {
this.content = content;
}
public String getContent() {
return content;
}
}
class MessagePrint { // 信息打印
public static void print() {
// 获取当前线程所保存的message对象
System.out.println("【MessagePrint】" + Resource.MESSAGES.get().getContent());
}
}
class Resource { // 中间类
public static final ThreadLocal MESSAGES = new ThreadLocal() ;
}
public class YootkDemo { // 李兴华编程训练营:yootk.ke.qq.com
public static void main(String[] args) throws Exception {
String[] values = new String[]{
"沐言科技:www.yootk.com",
"李兴华编程训练营:yootk.ke.qq.com",
"人才培养大纲:edu.yootk.com"}; // 每个线程执行各自的内容输出
for (String msg : values) {
new Thread(()->{
Resource.MESSAGES.set(new Message());
Resource.MESSAGES.get().setContent(msg);
MessagePrint.print(); // 不再传递引用对象
}).start();
}
}
}