您当前的位置: 首页 >  Java

ITKEY_

暂无认证

  • 0浏览

    0关注

    732博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

ITKEY_ 发布时间:2021-01-21 21:38:58 ,浏览量:0

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();
        }
    }
}
关注
打赏
1665243900
查看更多评论
立即登录/注册

微信扫码登录

0.0427s