Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.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 ThreadLocal示例出错_Java - Fatal编程技术网

Java ThreadLocal示例出错

Java ThreadLocal示例出错,java,Java,我开始学习如何使用Java,并在java2s.com上看到了本教程。它处理的是局部变量。我试着把它插入到我的编译器中,但在新线程(Main::run).start()时它会结巴部分。我不明白为什么它不想编译。我对Java不够精通,不知道是否应该使用该方法来创建新线程。任何帮助都将不胜感激。下面是完整的代码示例 public class Main { public static void main(String[] args) { new Thread(Main::run).star

我开始学习如何使用Java,并在java2s.com上看到了本教程。它处理的是局部变量。我试着把它插入到我的编译器中,但在
新线程(Main::run).start()时它会结巴部分。我不明白为什么它不想编译。我对Java不够精通,不知道是否应该使用该方法来创建新线程。任何帮助都将不胜感激。下面是完整的代码示例

public class Main {
  public static void main(String[] args) {
     new Thread(Main::run).start();
     new Thread(Main::run).start();
     }//from  ww  w .  j a  v  a2s  . co  m
  public static void run() {
     int counter = 3;
     System.out.println(Thread.currentThread().getName()+ "  generated counter:  " + counter);
     for (int i = 0; i < counter; i++) {
        CallTracker.call();
     }
  }
}
class CallTracker {
     private static ThreadLocal<Integer> threadLocal = new ThreadLocal<Integer>();
     public static void call() {
     int counter = 0;
     Integer counterObject = threadLocal.get();

     if (counterObject == null) {
        counter = 1;
     } else {
        counter = counterObject.intValue();
        counter++;
     }
     threadLocal.set(counter);
     String threadName = Thread.currentThread().getName();
     System.out.println("Call  counter for " + threadName + "  = " + counter);
   }
}
公共类主{
公共静态void main(字符串[]args){
新线程(Main::run).start();
新线程(Main::run).start();
}//来自ww w.j a v a2s.co m
公共静态无效运行(){
int计数器=3;
System.out.println(Thread.currentThread().getName()+“生成的计数器:”+计数器);
对于(int i=0;i
此代码可编译并将运行。我甚至亲自运行它来验证…因为为什么不

您遇到问题的原因可能是您的编译器设置为在Java1.8之前解释java。“Main::run”部分是从1.8开始的新功能。即使您使用的是1.8JDK,您的编译器也可能被设置为编译到早期版本


检查您的ide使用的级别,并确保其设置正确。

ThreadLocal
实际上与您遇到的问题无关。试着摆脱
CallTracker
run()
的主体,看看是否仍然存在同样的问题;我猜你会的。这是一段小得多的代码,可供您寻求帮助。