java - 对多个线程同时访问的静态 final方法的混淆

标签 java multithreading

我想知道,2个不同的线程可以同时调用final静态方法吗? 静态 final方法会同步吗? 提前致谢。 BR 高拉夫

最佳答案

许多线程可以同时调用一个final静态方法(实际上可以同时调用任何静态方法,final表示该方法不能被重写)。不,它本质上不是同步的,但它确实有局部变量。如果你想查看哪些线程在哪里,你可以随时打印当前线程 ID

static final void printThreadId() {
    Thread ct = Thread.currentThread();
    System.out.printf("%d %s%n", ct.getId(), ct.getName());
}

public static void main(String[] args) {
    printThreadId();
    Runnable r = new Runnable() {
        @Override
        public void run() {
            printThreadId();
            Thread.yield();
            printThreadId();
        }
    };
    Thread[] arr = { new Thread(r), new Thread(r) };
    for (Thread th : arr) {
        th.start();
    }
    Thread.yield();
    printThreadId();
    for (Thread th : arr) {
        try {
            th.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

输出示例

1 main
1 main
10 Thread-1
9 Thread-0
10 Thread-1
9 Thread-0

关于java - 对多个线程同时访问的静态 final方法的混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27012657/

相关文章:

ruby - 将代码添加到现有线程

java - ScheduledExecutorService 不会因未捕获的异常而停止线程

java - 在 Java 中从 char[],start,length 创建字符串的有效方法

java - 使用Struts2上传图片路径到数据库

java - 具有与输入处理方法分离的 setter/getter 的类是否可以被视为 "thread-safe"?

java - 发生 jsf 验证错误时执行操作

java - 如何使用 SpriteBatch 绘制方法

multithreading - 服务结构锁定和超时

java - 从线程更新数组

multithreading - Tomcat - 每个请求一个线程 - 或其他替代方案?