gpt4 book ai didi

java - 多线程会导致静态方法的并发问题吗?

转载 作者:搜寻专家 更新时间:2023-11-01 02:06:21 26 4
gpt4 key购买 nike

我有一个 Thread 场景,其中 3 个类是 MainThread.java,NormalWorkerClass1.java,NormalWorkerClass2.java

1 类:

class MainThread implements Runnable

{
private Thread thread = null;
//private variables
..
..
//default Constructor

public MainThread(){}

public MainThread(int val){
this.val=val;
}

public void start() {
thread = new Thread(this,"rootthread");
thread.start();
}

@Override
public void run() {

NormalWorkerClass1 instance1=NormalWorkerClass1.getInstance(); // Normal class
NormalWorkerClass2 instance2=NormalWorkerClass2.getInstance(); // for other working
try
{
while(true)
{
boolean retval=proccessSomething();
if(retval)
{
instance1.doMainProcess(arg..);
}
else
{
instance2.doMainProcess(arg..);
}
}
}
}

2类:

class NormalWorkerClass1
{
private ...
private variables
public static NormalWorkerClass1 getInstance() {
return new NormalWorkerClass1();
}

public void doMainProcess(arg..)
{

Files processing()
// same common methods in NormalWorkerClass2
UtilityAccess ad=UtilityAccess.getInstance();
ad.Web Service part()
ad.dB part()
ad.Mail sending()
}
}

3类:

 class NormalWorkerClass2
{
private ...
private variables
public static NormalWorkerClass2 getInstance() {
return new NormalWorkerClass2();
}

public void doMainProcess(arg..)
{
Files processing()
// same common methods in NormalWorkerClass1
UtilityAccess ad=UtilityAccess.getInstance();
ad.Web Service part()
ad.dB part()
ad.Mail sending()
}
}

这是 3 个类。 我的疑惑是:

1 )在多线程环境中,即如果类 2 和类 3 同时访问,是否 2 和 3 类会导致任何并发问题,因为它们都使用了一些通用的方法和类?

这里没有同步部分。Web 服务部分由另一个线程部分组成。

2) 当多线程访问this时会发生什么,

NormalWorkerClass1 instance1=NormalWorkerClass1.getInstance();//普通类NormalWorkerClass2 instance2=NormalWorkerClass2.getInstance();//用于其他工作

因为它的getInstance()方法是静态方法,多个线程将共享 NormalWorkerClass1 和 NormalWorkerClass2 类对象值?

5) NormalWorkerClass1 和 NormalWorkerClass2 这两个类调用相同的通用方法.. 例如.. web 服务部分.. 如果线程 1 进入 web 服务部分并需要一些时间才能完成.. 在那个特定时刻另一个线程 2 开始使用 web服务部分..这可能会导致整体执行出现任何问题。与邮件部分相同的情况也..会导致对象冲突的任何问题。我知道每个线程都有自己的执行堆栈和变量副本

4) 此代码是否会导致任何性能瓶颈?如果是,我如何改进此代码以实现多线程和性能改进环境。 ?

因为我是这个线程并发部分的新手..

最佳答案

并发导致问题的地方是当多个线程访问共享状态时,您的示例没有任何共享状态,它只是显示返回事物新实例的静态方法。如果您添加并发访问的静态类变量,那么您将不得不担心线程安全问题,因为线程会覆盖彼此的工作或更改对其他线程不可见。

调用方法本身不会引入并发问题,访问和更改实例和类变量的内容才是导致问题的原因。

关于java - 多线程会导致静态方法的并发问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31966353/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com