Java温故而知新-UUID类、Optional类、ThreadLocal

107 篇文章 1 订阅

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<String> 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<IMessage> 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<Message> 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();
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值