我开始学习如何使用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);
}
}
答案 0 :(得分:1)
此代码可编译并将运行。我甚至自己动手去验证......因为为什么不呢。
您遇到问题的原因很可能是您的编译器设置为在java 1.8之前解释java。部分&#34; Main :: run&#34;是一个从1.8开始的新功能。即使您使用的是1.8 jdk,您的编译器也可能被设置为编译为早期版本。
检查您的网站使用的级别,并确保其设置正确。