黑马程序员技术交流社区
标题:
有关线程的一道习题,求优化。
[打印本页]
作者:
施俊
时间:
2012-3-23 09:49
标题:
有关线程的一道习题,求优化。
编写程序实现如下功能:一个线程进行如下运算:1*2+2*3+3*4+……+199*200;另一个线程每隔一段时间读取前一个线程运算结果。
我的代码如下:
class Resource
{
private long sum=0;
private int i=1;
public void setSum(long sum)
{
this.sum=sum;
}
public long getSum()
{
return sum;
}
public void setI(int i)
{
this.i=i;
}
public int getI()
{
return i;
}
}
class Yunsuan implements Runnable
{
private Resource res;
Yunsuan(Resource res)
{
this.res=res;
}
public void run()
{
long temp=0;
for (int i=1;i<200 ;i++ )
{
temp += i*(i+1);
res.setSum(temp);
try
{
Thread.sleep(10);
}
catch (InterruptedException e)
{
}
res.setI(res.getI()+1);
}
}
}
class Huoqu implements Runnable
{
private Resource res;
Huoqu(Resource res)
{
this.res=res;
}
public void run()
{
while (res.getI()<200)
{
System.out.println(res.getSum());
try
{
Thread.sleep(10);
}
catch (InterruptedException e)
{
}
}
}
}
class YunsuanTest
{
public static void main(String[] args)
{
Resource res=new Resource();
Yunsuan y = new Yunsuan(res);
Huoqu h=new Huoqu(res);
Thread t1 = new Thread(y);
Thread t2 = new Thread(h);
t1.start();
t2.start();
}
}
复制代码
能够成功运行,不知道是否会发生安全问题,另外如何能避免发生读取了相同数据的情况?
还有一个问题是:感觉代码过长,有木有办法可以优化一下?
作者:
崔岩
时间:
2012-3-23 19:16
本帖最后由 崔岩 于 2012-3-23 19:30 编辑
首先我可以帮你把循环优化一下,把循环次数减半,别的吃完饭在想
static int j
for(int i = 2; i<=100; i+2)
{
temp+=j*i+(++(++j)) //我忘了java有 没有自增每次加2的符号 ?
}
1X2+2x3 +3X4+4X5...是由规律的,可以分组第一组(j=1)*(i=2) +(i=2)*(j+2) 每两组都符合这个规律
复制代码
其实单层循环问题不大,可是我们以后保不齐要接触到运算量较大的情况,而且也很可能在一个别的循环里调用这个方法而形成嵌套循环,这时候优化循环的意义就比较大了,尤其是要循环上千万次的情况,和在嵌入式设备上代码的效率我觉得很重要
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2