use*_*_vs 4 java concurrency static multithreading thread-safety
我有一个Thread scenerio,其中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..);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
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()
}
}
Run Code Online (Sandbox Code Playgroud)
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()
}
}
Run Code Online (Sandbox Code Playgroud)
这些是3个班级.我的怀疑是:
1)在多线程环境中,即如果同时访问类2和类3,2和3类是否会导致任何并发问题,因为两者都使用了一些常见的方法和类?
此处没有同步部分.Web服务部分由另一个线程部分组成.
2)多线程访问时会发生什么,
NormalWorkerClass1 instance1 = NormalWorkerClass1.getInstance(); // Normal Class NormalWorkerClass2 instance2 = NormalWorkerClass2.getInstance(); //其他工作
因为它的getInstance()方法是一个静态方法,多个线程会共享NormalWorkerClass1和NormalWorkerClass2类的对象值吗?
5)NormalWorkerClass1和NormalWorkerClass2这两个类都调用相同的常用方法..例如.Web服务部分..如果一个thread1进入Web服务部分并需要一些时间来完成..在那个特定时刻另一个thread2来使用Web服务部分..这可能会导致总执行中的任何问题.与邮件部分相同的情况也将...在对象冲突中引起任何问题.我知道每个线程都有自己的堆栈用于执行并拥有变量的副本
4)此代码是否会导致任何性能瓶颈?如果是,我如何改进此代码以实现多线程和性能改进环境.?
因为我是这个线程并发部分的新手..
并发性导致问题的地方是当多个线程访问共享状态时,您的示例没有任何共享状态,它只显示返回新事物的静态方法.如果添加并发访问的静态类变量,则必须担心线程覆盖彼此的工作或其他线程不可见的更改时的线程安全问题.
调用方法本身并不会引入并发问题,访问和更改实例和类变量的内容是导致问题的原因.
| 归档时间: |
|
| 查看次数: |
2020 次 |
| 最近记录: |