ThreadLocal示例出错

时间:2015-03-16 00:04:15

标签: java

我开始学习如何使用Java,并从java2s.com看到了这个教程。它处理ThreadLocal变量。我尝试将其插入我的编译器,但它在new Thread(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);
   }
}

1 个答案:

答案 0 :(得分:1)

此代码可编译并将运行。我甚至自己动手去验证......因为为什么不呢。

您遇到问题的原因很可能是您的编译器设置为在java 1.8之前解释java。部分&#34; Main :: run&#34;是一个从1.8开始的新功能。即使您使用的是1.8 jdk,您的编译器也可能被设置为编译为早期版本。

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