JAVA中多线程处理同一对象的问题 50

现在情况是这样的:我有几个类,分别是Table,Column和Cell,Table类有一个Column数组变量,Column类有一个Cell数组变量。之后我经过某些操作,... 现在情况是这样的:
我有几个类,分别是Table, Column和Cell,Table类有一个Column数组变量,Column类有一个Cell数组变量。之后我经过某些操作,新建了一个Table对象table。

接下来,我有还一个实现了Runnable接口的抽象类X;X还有一个抽象方法init,init需要一个Column类的对象作为参数。

最后,我写了一些算法类继承了抽象类X,这些类都有一个类型为Column的变量,并且重写了init和run方法;在init方法中,把方法的参数赋予类的成员变量;在run方法中,循环处理成员变量Column的所有Cell,

在运行过程中,主线程负责从Table对象table中拿到不同的Column对象,使用它们作为参数调用不同的算法类的init方法,然后再多线程跑这些算法类。

代码示例如下:
class Table{
Column[] columns;

}

class Column{
Cell[] cells;

}

class Cell<T>{
T value;

}

abstract class X implements Runnable{
abstract void init(Column column);

}

class X1 extends X{
Column column;

@Override

void init(Column column){
this.column = column;
}

@Override

void run(){
for(int i = 0; i < column.size(); i++){
Cell cell = column.get[i];

//做一些事情

cell.setValue("xxxx");

}

}

}

主线程中:
Table table = new Table();
//给table赋值,假设有10个column
for(int i = 0; i < 10; i ++){
Column column = table.getColumn(i);

X x1 = new X1();

x1.init(column);

new Thread(x1,"x1").start();

}

也就是说,假设一个table有10个column,就把这10个column交给10个算法对象去处理,这10个算法对象中可能来自同一个继承了X的类。

我的问题是:用这种结构多线程处理同一个Table对象中不同的column,会不会产生线程之间的冲突?现在的前提是column之间本身就是没有关联的,也就是说这里不存在线程同步的问题,每一个算法类只需要各司其职全力跑run方法就好了。但是目前我测试出来的结果是,多线程中的每一个线程都比单线程处理要慢。现在也不用考虑具体在run方法中做了什么,我只是简单的给每个cell重新设置了一个值而已。

举一个例子,单线程中,处理每一列都需要20毫秒,总共4列,共80毫秒;多线程中,处理每一列需要50毫秒,共50毫秒。

而后我又做了一个测试,在每个算法类的init方法中,不再使用传入的column给成员变量赋值,而是new一个Column对象,得到的结果是要快很多

我想知道为什么会如此影响效率?
补充一下,我的目的就是同时处理多个column,但是多个column的数据是一次性读出来的,而且我也不知道到底有多少个column;我所知道的就是每个column对应哪个算法类
展开
 我来答
匿名用户
2015-02-03
展开全部
确定是同一个对象?

使用
public void method() {
synchronized (column){
//…..
}
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式