View Javadoc
1   /*
2   * Copyright 2017 The Netty Project
3   *
4   * The Netty Project licenses this file to you under the Apache License,
5   * version 2.0 (the "License"); you may not use this file except in compliance
6   * with the License. You may obtain a copy of the License at:
7   *
8   *   https://www.apache.org/licenses/LICENSE-2.0
9   *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13  * License for the specific language governing permissions and limitations
14  * under the License.
15  */
16  package io.netty5.util.concurrent;
17  
18  import static java.util.Objects.requireNonNull;
19  
20  final class FastThreadLocalRunnable implements Runnable {
21      private final Runnable runnable;
22  
23      private FastThreadLocalRunnable(Runnable runnable) {
24          this.runnable = requireNonNull(runnable, "runnable");
25      }
26  
27      @Override
28      public void run() {
29          try {
30              runnable.run();
31          } finally {
32              FastThreadLocal.removeAll();
33          }
34      }
35  
36      static Runnable wrap(Runnable runnable) {
37          return runnable instanceof FastThreadLocalRunnable ? runnable : new FastThreadLocalRunnable(runnable);
38      }
39  }