¶Ô±ÈÐÂÎļþ |
| | |
| | | /* |
| | | * |
| | | * Copyright 2019 http://www.hswebframework.org |
| | | * |
| | | * Licensed under the Apache License, Version 2.0 (the "License"); |
| | | * you may not use this file except in compliance with the License. |
| | | * You may obtain a copy of the License at |
| | | * |
| | | * http://www.apache.org/licenses/LICENSE-2.0 |
| | | * |
| | | * Unless required by applicable law or agreed to in writing, software |
| | | * distributed under the License is distributed on an "AS IS" BASIS, |
| | | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| | | * See the License for the specific language governing permissions and |
| | | * limitations under the License. |
| | | * |
| | | */ |
| | | package org.springblade.core.tool.utils; |
| | | |
| | | import org.springframework.lang.Nullable; |
| | | |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | import java.util.function.Supplier; |
| | | |
| | | /** |
| | | * ThreadLocal å·¥å
·ç±»,éè¿å¨ThreadLocalåå¨mapä¿¡æ¯,æ¥å®ç°å¨ThreadLocalä¸ç»´æ¤å¤ä¸ªä¿¡æ¯ |
| | | * <br>e.g.<code> |
| | | * ThreadLocalUtils.put("key",value);<br> |
| | | * ThreadLocalUtils.get("key");<br> |
| | | * ThreadLocalUtils.remove("key");<br> |
| | | * ThreadLocalUtils.getAndRemove("key");<br> |
| | | * ThreadLocalUtils.get("key",()->defaultValue);<br> |
| | | * ThreadLocalUtils.clear();<br> |
| | | * </code> |
| | | * |
| | | * @author zhouhao |
| | | * @since 2.0 |
| | | */ |
| | | @SuppressWarnings("unchecked") |
| | | public class ThreadLocalUtil { |
| | | private static final ThreadLocal<Map<String, Object>> LOCAL = ThreadLocal.withInitial(HashMap::new); |
| | | |
| | | /** |
| | | * @return threadLocalä¸çå
¨é¨å¼ |
| | | */ |
| | | public static Map<String, Object> getAll() { |
| | | return new HashMap<>(LOCAL.get()); |
| | | } |
| | | |
| | | /** |
| | | * 设置ä¸ä¸ªå¼å°ThreadLocal |
| | | * |
| | | * @param key é® |
| | | * @param value å¼ |
| | | * @param <T> å¼çç±»å |
| | | * @return 被æ¾å
¥çå¼ |
| | | * @see Map#put(Object, Object) |
| | | */ |
| | | public static <T> T put(String key, T value) { |
| | | LOCAL.get().put(key, value); |
| | | return value; |
| | | } |
| | | |
| | | /** |
| | | * 设置ä¸ä¸ªå¼å°ThreadLocal |
| | | * |
| | | * @param map map |
| | | * @return 被æ¾å
¥çå¼ |
| | | * @see Map#putAll(Map) |
| | | */ |
| | | public static void put(Map<String, Object> map) { |
| | | LOCAL.get().putAll(map); |
| | | } |
| | | |
| | | /** |
| | | * å é¤åæ°å¯¹åºçå¼ |
| | | * |
| | | * @param key |
| | | * @see Map#remove(Object) |
| | | */ |
| | | public static void remove(String key) { |
| | | LOCAL.get().remove(key); |
| | | } |
| | | |
| | | /** |
| | | * æ¸
空ThreadLocal |
| | | * |
| | | * @see Map#clear() |
| | | */ |
| | | public static void clear() { |
| | | LOCAL.remove(); |
| | | } |
| | | |
| | | /** |
| | | * ä»ThreadLocalä¸è·åå¼ |
| | | * |
| | | * @param key é® |
| | | * @param <T> 弿³å |
| | | * @return å¼, ä¸åå¨åè¿ånull, å¦æç±»å䏿³åä¸ä¸è´, å¯è½æåº{@link ClassCastException} |
| | | * @see Map#get(Object) |
| | | * @see ClassCastException |
| | | */ |
| | | @Nullable |
| | | public static <T> T get(String key) { |
| | | return ((T) LOCAL.get().get(key)); |
| | | } |
| | | |
| | | /** |
| | | * ä»ThreadLocalä¸è·åå¼,å¹¶æå®ä¸ä¸ªå½å¼ä¸åå¨çæä¾è
|
| | | * |
| | | * @see Supplier |
| | | */ |
| | | @Nullable |
| | | public static <T> T getIfAbsent(String key, Supplier<T> supplierOnNull) { |
| | | return ((T) LOCAL.get().computeIfAbsent(key, k -> supplierOnNull.get())); |
| | | } |
| | | |
| | | /** |
| | | * è·åä¸ä¸ªå¼åç¶åå 餿 |
| | | * |
| | | * @param key é® |
| | | * @param <T> å¼ç±»å |
| | | * @return å¼, ä¸åå¨åè¿ånull |
| | | * @see this#get(String) |
| | | * @see this#remove(String) |
| | | */ |
| | | public static <T> T getAndRemove(String key) { |
| | | try { |
| | | return get(key); |
| | | } finally { |
| | | remove(key); |
| | | } |
| | | } |
| | | |
| | | } |