Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ScheduledExecutorService的ThreadLocal_Java_Java.util.concurrent - Fatal编程技术网

Java ScheduledExecutorService的ThreadLocal

Java ScheduledExecutorService的ThreadLocal,java,java.util.concurrent,Java,Java.util.concurrent,有人能告诉我为什么当我使用ScheduledExecutorService启动线程时,threadlocal.get()会给我null值吗 public class ThreadTest extends ParentClassThread { private static ScheduledFuture<?> periodicFuture; private static ScheduledExecutorService ex; public Threa

有人能告诉我为什么当我使用ScheduledExecutorService启动线程时,threadlocal.get()会给我null值吗

 public class ThreadTest extends ParentClassThread
  {
    private static ScheduledFuture<?> periodicFuture;
    private static ScheduledExecutorService ex;

    public ThreadTest(){
        ex = Executors.newSingleThreadScheduledExecutor();
        periodicFuture = ex.schedule(this, 1, TimeUnit.SECONDS);
    }

    @Override
    public void run() {
       try {
            System.out.println("Thread started");
            for (int i = 0; i <= 100000; i++) {
                System.out.println(i);
            }
            ThreadLocal local = new ThreadLocal();
            System.out.println(local.get());
        }catch(Exception e){

        }finally {
            ex.shutdown();
        }

      }
   }
公共类ThreadTest扩展了ParentClassThread
{
私有静态调度未来周期未来;
私有静态ScheduledExecutorService ex;
公共线程测试(){
ex=Executors.newSingleThreadScheduledExecutor();
periodicFuture=ex.schedule(这个,1,时间单位为秒);
}
@凌驾
公开募捐{
试一试{
System.out.println(“线程启动”);

对于(int i=0;i,因为指定的ThreadLocal变量为空。 您需要设置一个值或指定一个初始值

ThreadLocal<String> threadLocal = ThreadLocal.withInitial(() -> "initial value");
ThreadLocal-ThreadLocal=ThreadLocal.withInitial(()->“初始值”);

ThreadLocal ThreadLocal=new ThreadLocal();//现在为null
threadLocal.set(“value”);//现在持有“value”

如果未设置值,ThreadLocal将默认为null。

您应该在方法运行之外初始化thread local。您只需初始化一次,然后从线程内部使用.set()和.get()。不要使用thread local的多个实例。

ThreadLocal=new ThreadLocal();
ThreadLocal<String> local = new ThreadLocal<String>();
local.set("String");
System.out.println(local.get());
local.set(“字符串”); System.out.println(local.get());

您需要在ThreadLocalVariable中设置一些内容,然后检索它。最初,ThreadLocal是空的。

更新了问题…请不要使用get方法设置您试图访问的ThreadLocal。这不是您通常使用ThreadLocal的方式;您试图实现什么?这看起来像是XY问题我的错…我可以我不明白一件简单的事情…接受下面的答案…谢谢
ThreadLocal<String> local = new ThreadLocal<String>();
local.set("String");
System.out.println(local.get());