繁体   English   中英

多个线程访问同一类

[英]Multiple threads accessing same class

我有4个线程同时运行,试图访问以下四个相同类的不同方法。 我想知道线程将以什么顺序执行。

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

method1由T1调用method2由T2调用method3由T3调用method4由T4调用

以上所有方法都在同一类中。 我完全困惑哪个线程将运行。 请求您的帮助。

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

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

需要同步。 遵循此链接进行同步: http : //www.tutorialspoint.com/java/java_thread_synchronization.htm

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

同步完全没有帮助。 它只允许确保原子性和内存障碍。

由于这个事实,最著名的“问题”可能是: 竞争状况 ,在这种情况下,控制程序员对线程的决策非常敏感。

没有办法知道这一点。 所有线程根据系统中CPU /内核的数量,系统的优先级以及整个系统的负载并发运行。 因此,这几乎是一个机会问题,哪个线程有机会执行一些代码。

线程调度程序看似随意的性质也使调试竞态条件,活动锁和死锁对开发人员产生了很大的“乐趣”。 当您不使用(足够)同步机制时,无法可靠地预测操作系统如何执行代码。

线程将执行的顺序将取决于多种因素,因此,真正的问题是您希望它们以什么顺序执行,并且在什么条件下该顺序会改变?

解决该问题后,您可以强制一个线程等待或阻塞另一个线程,直到完成为止。 在大多数语言/环境中,这是最常见的线程编程方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM