多个线程访问同一个类

时间:2013-04-18 10:33:01

标签: java multithreading

我有4个线程同时运行,尝试访问同一类的四个不同方法。 我想知道线程执行的顺序。

public void method1();
public static void method2(); 
public synchronized void method3();
public static synchronized method4();

方法1由T1调用 method2由T2调用 method3由T3调用 method4由T4调用

以上所有方法属于同一类。 我对完成哪个订单线程感到困惑。 请求你的帮助。

5 个答案:

答案 0 :(得分:3)

线程将半并行运行。如果不同步它们,它们可以按任意顺序运行。

您在示例中提供的同步方法不会相互影响。前2个完全没有同步, Object 实例上的第三个同步, Class 上的第四个同步。因此,四个线程可以按任何特定顺序运行。

答案 1 :(得分:1)

需要同步。请按照此同步链接:http://www.tutorialspoint.com/java/java_thread_synchronization.htm

答案 2 :(得分:1)

预测线程订单是完全不可能的。这是JVM的全部责任,而不是程序员,并且没有基本法则。

同步对此没有任何帮助。它只是允许确保原子性和内存障碍。

由于这个事实,最着名的“问题”可能是:Race Condition控制程序员对线程的决定很敏感。

答案 3 :(得分:0)

没有办法知道这一点。所有线程根据系统中的CPU /核心数量,系统的优先级以及整个系统的负载同时运行。因此,主要是哪个线程有机会执行某些代码是偶然的。

线程调度程序看似随意的特性也使得调试竞争条件,活锁和死锁对开发人员来说非常“有趣”。当你没有使用(足够的)同步机制时,没有办法可靠地预测操作系统如何执行你的代码。

答案 4 :(得分:0)

线程执行的顺序取决于多种因素,所以真正的问题是你想要执行什么顺序,以及在什么条件下该顺序会发生变化?< / p>

一旦你完成了这项工作,就可以强制一个线程等待或阻止另一个线程,直到它完成为止。这是大多数语言/环境中最常用的线程编程方法。